diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index d5fc79bee..f34e29a56 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "9"; public const string Build = "0"; - public const string Revision = "3313"; + public const string Revision = "3315"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 229c63b6b..557106db1 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ %MINOR%=9 -%REVISION%=3313 +%REVISION%=3315 %COREVERSION%=0 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 73fa2b419..e38f4b03f 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.9.0.3313 +3.9.0.3315 diff --git a/ReleaseGenerators/PT4/Lib/PT-Ext.dll b/ReleaseGenerators/PT4/Lib/PT-Ext.dll index 5d0db2dfa..e7c0e67cd 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT-Ext.dll and b/ReleaseGenerators/PT4/Lib/PT-Ext.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4AArray.dll b/ReleaseGenerators/PT4/Lib/PT4AArray.dll index cbfa80153..84d12ae17 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4AArray.dll and b/ReleaseGenerators/PT4/Lib/PT4AArray.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ABegin.dll b/ReleaseGenerators/PT4/Lib/PT4ABegin.dll index 639b987cf..e54002f1f 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ABegin.dll and b/ReleaseGenerators/PT4/Lib/PT4ABegin.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ABoolean.dll b/ReleaseGenerators/PT4/Lib/PT4ABoolean.dll index 440eed3dc..846f5ac96 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ABoolean.dll and b/ReleaseGenerators/PT4/Lib/PT4ABoolean.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ACase.dll b/ReleaseGenerators/PT4/Lib/PT4ACase.dll index fd45101ab..19d511839 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ACase.dll and b/ReleaseGenerators/PT4/Lib/PT4ACase.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4AExam.dll b/ReleaseGenerators/PT4/Lib/PT4AExam.dll index 8ab178c68..2521d4956 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4AExam.dll and b/ReleaseGenerators/PT4/Lib/PT4AExam.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4AFunc.dll b/ReleaseGenerators/PT4/Lib/PT4AFunc.dll index 06f25ea2a..366557d1e 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4AFunc.dll and b/ReleaseGenerators/PT4/Lib/PT4AFunc.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4AIf.dll b/ReleaseGenerators/PT4/Lib/PT4AIf.dll index c091b87f6..7aa306460 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4AIf.dll and b/ReleaseGenerators/PT4/Lib/PT4AIf.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4AInteger.dll b/ReleaseGenerators/PT4/Lib/PT4AInteger.dll index 5d7344fc3..f4df1ee24 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4AInteger.dll and b/ReleaseGenerators/PT4/Lib/PT4AInteger.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ALoopFor.dll b/ReleaseGenerators/PT4/Lib/PT4ALoopFor.dll index b31c0788a..f9580a985 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ALoopFor.dll and b/ReleaseGenerators/PT4/Lib/PT4ALoopFor.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4AProc.dll b/ReleaseGenerators/PT4/Lib/PT4AProc.dll index 66b01e41b..8172c11a5 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4AProc.dll and b/ReleaseGenerators/PT4/Lib/PT4AProc.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ASeries.dll b/ReleaseGenerators/PT4/Lib/PT4ASeries.dll index 0d19cec14..9b287a184 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ASeries.dll and b/ReleaseGenerators/PT4/Lib/PT4ASeries.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4AWhile.dll b/ReleaseGenerators/PT4/Lib/PT4AWhile.dll index 58c55d514..a49aad66d 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4AWhile.dll and b/ReleaseGenerators/PT4/Lib/PT4AWhile.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ArrFilter.dll b/ReleaseGenerators/PT4/Lib/PT4ArrFilter.dll index 6d73b6286..f777df615 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ArrFilter.dll and b/ReleaseGenerators/PT4/Lib/PT4ArrFilter.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ArrFind.dll b/ReleaseGenerators/PT4/Lib/PT4ArrFind.dll index b85e7793d..51959da89 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ArrFind.dll and b/ReleaseGenerators/PT4/Lib/PT4ArrFind.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ArrGen.dll b/ReleaseGenerators/PT4/Lib/PT4ArrGen.dll index 6f2579c18..158f13ff8 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ArrGen.dll and b/ReleaseGenerators/PT4/Lib/PT4ArrGen.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ArrObj.dll b/ReleaseGenerators/PT4/Lib/PT4ArrObj.dll index ccae5eb35..2fe1d4b37 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ArrObj.dll and b/ReleaseGenerators/PT4/Lib/PT4ArrObj.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ArrOp.dll b/ReleaseGenerators/PT4/Lib/PT4ArrOp.dll index e4dd30ca6..dca6981d9 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ArrOp.dll and b/ReleaseGenerators/PT4/Lib/PT4ArrOp.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ArrShift.dll b/ReleaseGenerators/PT4/Lib/PT4ArrShift.dll index c1b3d8e4f..d454701a6 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ArrShift.dll and b/ReleaseGenerators/PT4/Lib/PT4ArrShift.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ArrSlice.dll b/ReleaseGenerators/PT4/Lib/PT4ArrSlice.dll index f9cfa1d25..d89584496 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ArrSlice.dll and b/ReleaseGenerators/PT4/Lib/PT4ArrSlice.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ArrTransf.dll b/ReleaseGenerators/PT4/Lib/PT4ArrTransf.dll index a62e385cf..3f58778bf 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ArrTransf.dll and b/ReleaseGenerators/PT4/Lib/PT4ArrTransf.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ExamBegin_ru.dll b/ReleaseGenerators/PT4/Lib/PT4ExamBegin_ru.dll index a0ea6c93a..0d1e317f8 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ExamBegin_ru.dll and b/ReleaseGenerators/PT4/Lib/PT4ExamBegin_ru.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ExamCheck_ru.dll b/ReleaseGenerators/PT4/Lib/PT4ExamCheck_ru.dll index 7f1f9bd36..0f65f9cc0 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ExamCheck_ru.dll and b/ReleaseGenerators/PT4/Lib/PT4ExamCheck_ru.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ExamTaskC_ru.dll b/ReleaseGenerators/PT4/Lib/PT4ExamTaskC_ru.dll index 7b0a35f59..c9a7369f8 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ExamTaskC_ru.dll and b/ReleaseGenerators/PT4/Lib/PT4ExamTaskC_ru.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4LinqBegin.dll b/ReleaseGenerators/PT4/Lib/PT4LinqBegin.dll index 98c906b62..1f773a4bd 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4LinqBegin.dll and b/ReleaseGenerators/PT4/Lib/PT4LinqBegin.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4LinqObj.dll b/ReleaseGenerators/PT4/Lib/PT4LinqObj.dll index 729f36b1a..735d34623 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4LinqObj.dll and b/ReleaseGenerators/PT4/Lib/PT4LinqObj.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4LinqXml.dll b/ReleaseGenerators/PT4/Lib/PT4LinqXml.dll index 58ee09cbe..a1a3f9c7d 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4LinqXml.dll and b/ReleaseGenerators/PT4/Lib/PT4LinqXml.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ObjArray.dll b/ReleaseGenerators/PT4/Lib/PT4ObjArray.dll index b4301f3e5..563dedb03 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ObjArray.dll and b/ReleaseGenerators/PT4/Lib/PT4ObjArray.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4TMDemoAbc.dll b/ReleaseGenerators/PT4/Lib/PT4TMDemoAbc.dll index 123bb7935..2d5bdab51 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4TMDemoAbc.dll and b/ReleaseGenerators/PT4/Lib/PT4TMDemoAbc.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ZArray.dll b/ReleaseGenerators/PT4/Lib/PT4ZArray.dll index 755b555e7..9bbde6784 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ZArray.dll and b/ReleaseGenerators/PT4/Lib/PT4ZArray.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ZMatrix.dll b/ReleaseGenerators/PT4/Lib/PT4ZMatrix.dll index 709d15fb2..b908bbf67 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ZMatrix.dll and b/ReleaseGenerators/PT4/Lib/PT4ZMatrix.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ZMinmax.dll b/ReleaseGenerators/PT4/Lib/PT4ZMinmax.dll index 62ab2fd52..ccc93eb60 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ZMinmax.dll and b/ReleaseGenerators/PT4/Lib/PT4ZMinmax.dll differ diff --git a/ReleaseGenerators/PT4/Lib/PT4ZSeries.dll b/ReleaseGenerators/PT4/Lib/PT4ZSeries.dll index c27456e83..5f9df74e7 100644 Binary files a/ReleaseGenerators/PT4/Lib/PT4ZSeries.dll and b/ReleaseGenerators/PT4/Lib/PT4ZSeries.dll differ diff --git a/ReleaseGenerators/PT4/PT4Setup.exe b/ReleaseGenerators/PT4/PT4Setup.exe index a73d0a28d..88d956600 100644 Binary files a/ReleaseGenerators/PT4/PT4Setup.exe and b/ReleaseGenerators/PT4/PT4Setup.exe differ diff --git a/ReleaseGenerators/PT4/PT4Tasks.css b/ReleaseGenerators/PT4/PT4Tasks.css index 163aa44a1..3c17b57da 100644 --- a/ReleaseGenerators/PT4/PT4Tasks.css +++ b/ReleaseGenerators/PT4/PT4Tasks.css @@ -18,6 +18,6 @@ P.ptCommentQuote{text-align:left;margin-left:120px;margin-top:0px;margin-bottom: P.ptCommentContinue{text-align:justify;} P.ptFooter{text-align:right;font-size:10pt;font-style:italic;margin-right:0px;} SPAN.ptSpecial{font-family:"Arial";} -PRE{font-family:"Courier New";text-align:left;font-size:10pt;text-indent:0px;margin-top:5px; margin-right:10px; margin-bottom:0px; margin-left:60px;} +PRE{text-align:left;font-size:10pt;text-indent:0px;margin-top:5px; margin-right:10px; margin-bottom:0px; margin-left:60px;} CODE{font-size:10pt;} P.ptPicture{font-family:Arial, sans-serif;margin-top: 5px;margin-bottom: 5px;margin-left: 60px;font-size: small;color: #000080;text-indent: 0pt;text-align: justify} diff --git a/ReleaseGenerators/PT4/PT4pabc.dll b/ReleaseGenerators/PT4/PT4pabc.dll index e956cfce6..e9f3fdce5 100644 Binary files a/ReleaseGenerators/PT4/PT4pabc.dll and b/ReleaseGenerators/PT4/PT4pabc.dll differ diff --git a/ReleaseGenerators/PT4/Results.abc b/ReleaseGenerators/PT4/Results.abc index 265d6fe1e..2a35e9604 100644 --- a/ReleaseGenerators/PT4/Results.abc +++ b/ReleaseGenerators/PT4/Results.abc @@ -1 +1 @@ -N祭|10PABC2 NC:\Program Files (x86)\PascalABC.NET\PT4 NV8˜#"%'%&&*&$#"%'%&&*&6b3:'%&&*&$#"%'%8>>674;7?;;;B;88;=@78=>;9;:;8>87@< \ No newline at end of file diff --git a/ReleaseGenerators/PT4/license-en.txt b/ReleaseGenerators/PT4/license-en.txt index c45257548..3b3a22f91 100644 --- a/ReleaseGenerators/PT4/license-en.txt +++ b/ReleaseGenerators/PT4/license-en.txt @@ -1,6 +1,6 @@ PROGRAMMING TASKBOOK FOR PASCALABC.NET - Copyright (c) M. Abramyan, 1998-2018 + Copyright (c) M. Abramyan, 1998-2023 LICENSE FOR USE AND DISTRIBUTION diff --git a/ReleaseGenerators/PT4/license-ru.txt b/ReleaseGenerators/PT4/license-ru.txt index cd6039036..d370b1029 100644 --- a/ReleaseGenerators/PT4/license-ru.txt +++ b/ReleaseGenerators/PT4/license-ru.txt @@ -3,7 +3,7 @@ PROGRAMMING TASKBOOK FOR PASCALABC.NET ( PascalABC.NET) - Copyright (c) . . , 1998-2018 + Copyright (c) . . , 1998-2023 diff --git a/ReleaseGenerators/PT4/loaddat.txt b/ReleaseGenerators/PT4/loaddat.txt index 45d906518..059c79b4b 100644 --- a/ReleaseGenerators/PT4/loaddat.txt +++ b/ReleaseGenerators/PT4/loaddat.txt @@ -22,6 +22,7 @@ ArrSlice ArrShift ArrObj ObjArray +ZFunc ZSeries ZMinmax ZArray diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 44af5c1f2..1ec854116 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.9.0.3313' +!define VERSION '3.9.0.3315' diff --git a/ReleaseGenerators/RebuildStandartModules.pas b/ReleaseGenerators/RebuildStandartModules.pas index c12c0e5df..52d2d5f3d 100644 --- a/ReleaseGenerators/RebuildStandartModules.pas +++ b/ReleaseGenerators/RebuildStandartModules.pas @@ -9,13 +9,16 @@ GraphWPF, Turtle, TurtleWPF, WPFObjects, NumLibABC, - IniFile, PointerTools, PointRect, PT4, PT4MakerNetX, Robot, RobotField, - RobotTaskMaker, RobotZadan, Sockets, Utils, VCL, Timers, PT4Exam, PT4TaskMakerNET, RBDMUtils, + IniFile, PointerTools, PointRect, + PT4, PT4Exam, PT4MakerNetX, PT4TaskMakerNET, xPT4MakerNetX, xPT4TaskMakerNET, + Robot, RobotField, + RobotTaskMaker, RobotZadan, Sockets, Utils, VCL, Timers, RBDMUtils, Collections, Arrays, Core, FormsABC, MPI, ClientServer, Speech, Sounds, Countries, ABCDatabases,PT4Databases,BlockFileOfT,Controls, OpenCLABC, OpenCL, OpenGLABC, OpenGL, - BBCMicroBit, School, SF, TwoPanelsWindow, NUnitABC, PlotWPF, XLSX, LightPT, Tasks, Мозаика + BBCMicroBit, School, SF, TwoPanelsWindow, NUnitABC, PlotWPF, XLSX, LightPT, Tasks, Мозаика, + TasksArr ; begin diff --git a/ReleaseGenerators/sect_Core.nsh b/ReleaseGenerators/sect_Core.nsh index b32bbe3c0..526dfd68a 100644 --- a/ReleaseGenerators/sect_Core.nsh +++ b/ReleaseGenerators/sect_Core.nsh @@ -113,6 +113,11 @@ File ..\bin\Lib\PointerTools.pcu File ..\bin\Lib\PointRect.pcu File ..\bin\Lib\PT4.pcu + File ..\bin\Lib\PT4Exam.pcu + File ..\bin\Lib\PT4MakerNetX.pcu + File ..\bin\Lib\PT4TaskMakerNET.pcu + File ..\bin\Lib\xPT4MakerNetX.pcu + File ..\bin\Lib\xPT4TaskMakerNET.pcu File ..\bin\Lib\Robot.pcu File ..\bin\Lib\RobotField.pcu File ..\bin\Lib\RobotTaskMaker.pcu @@ -121,15 +126,12 @@ File ..\bin\Lib\Timers.pcu File ..\bin\Lib\Utils.pcu File ..\bin\Lib\VCL.pcu - File ..\bin\Lib\PT4Exam.pcu - File ..\bin\Lib\PT4TaskMakerNET.pcu File ..\bin\Lib\RBDMUtils.pcu File ..\bin\Lib\Collections.pcu File ..\bin\Lib\Core.pcu File ..\bin\Lib\MPI.pcu File ..\bin\Lib\ClientServer.pcu File ..\bin\Lib\OpenGL.pcu - File ..\bin\Lib\PT4MakerNetX.pcu File ..\bin\Lib\Speech.pcu File ..\bin\Lib\Sounds.pcu File ..\bin\Lib\BlockFileOfT.pcu @@ -148,6 +150,7 @@ File ..\bin\Lib\PlotWPF.pcu File ..\bin\Lib\XLSX.pcu File ..\bin\Lib\Мозаика.pcu + File ..\bin\Lib\TasksArr.pcu File ..\bin\Lib\PABCRtl.dll File ..\bin\Lib\HelixToolkit.Wpf.dll @@ -194,6 +197,11 @@ ${AddFile} "PointerTools.pcu" ${AddFile} "PointRect.pcu" ${AddFile} "PT4.pcu" + ${AddFile} "PT4Exam.pcu" + ${AddFile} "PT4MakerNetX.pcu" + ${AddFile} "PT4TaskMakerNET.pcu" + ${AddFile} "xPT4MakerNetX.pcu" + ${AddFile} "xPT4TaskMakerNET.pcu" ${AddFile} "Robot.pcu" ${AddFile} "RobotField.pcu" ${AddFile} "RobotTaskMaker.pcu" @@ -202,15 +210,12 @@ ${AddFile} "Timers.pcu" ${AddFile} "Utils.pcu" ${AddFile} "VCL.pcu" - ${AddFile} "PT4TaskMakerNET.pcu" - ${AddFile} "PT4Exam.pcu" ${AddFile} "RBDMUtils.pcu" ${AddFile} "Collections.pcu" ${AddFile} "Core.pcu" ${AddFile} "MPI.pcu" ${AddFile} "ClientServer.pcu" ${AddFile} "OpenGL.pcu" - ${AddFile} "PT4MakerNetX.pcu" ${AddFile} "Speech.pcu" ${AddFile} "Sounds.pcu" ${AddFile} "BlockFileOfT.pcu" @@ -229,6 +234,7 @@ ${AddFile} "PlotWPF.pcu" ${AddFile} "XLSX.pcu" ${AddFile} "Мозаика.pcu" + ${AddFile} "TasksArr.pcu" ${AddFile} "turtle.png" @@ -294,6 +300,10 @@ File ..\bin\Lib\PointRect.pas File ..\bin\Lib\PT4.pas File ..\bin\Lib\PT4Exam.pas + File ..\bin\Lib\PT4MakerNetX.pas + File ..\bin\Lib\xPT4MakerNetX.pas + File ..\bin\Lib\PT4TaskMakerNET.pas + File ..\bin\Lib\xPT4TaskMakerNET.pas File ..\bin\Lib\Robot.pas File ..\bin\Lib\RobotField.pas File ..\bin\Lib\RobotTaskMaker.pas @@ -302,14 +312,12 @@ File ..\bin\Lib\Timers.pas File ..\bin\Lib\Utils.pas File ..\bin\Lib\VCL.pas - File ..\bin\Lib\PT4TaskMakerNET.pas File ..\bin\Lib\RBDMUtils.pas File ..\bin\Lib\Collections.pas File ..\bin\Lib\Core.pas File ..\bin\Lib\MPI.pas File ..\bin\Lib\ClientServer.pas File ..\bin\Lib\OpenGL.pas - File ..\bin\Lib\PT4MakerNetX.pas File ..\bin\Lib\Speech.pas File ..\bin\Lib\Sounds.pas File ..\bin\Lib\BlockFileOfT.pas @@ -369,6 +377,10 @@ ${AddFile} "PointRect.pas" ${AddFile} "PT4.pas" ${AddFile} "PT4Exam.pas" + ${AddFile} "PT4MakerNetX.pas" + ${AddFile} "xPT4MakerNetX.pas" + ${AddFile} "PT4TaskMakerNET.pas" + ${AddFile} "xPT4TaskMakerNET.pas" ${AddFile} "Robot.pas" ${AddFile} "RobotField.pas" ${AddFile} "RobotTaskMaker.pas" @@ -377,13 +389,11 @@ ${AddFile} "Timers.pas" ${AddFile} "Utils.pas" ${AddFile} "VCL.pas" - ${AddFile} "PT4TaskMakerNET.pas" ${AddFile} "RBDMUtils.pas" ${AddFile} "Collections.pas" ${AddFile} "Core.pas" ${AddFile} "MPI.pas" ${AddFile} "ClientServer.pas" - ${AddFile} "PT4MakerNetX.pas" ${AddFile} "Speech.pas" ${AddFile} "Sounds.pas" ${AddFile} "BlockFileOfT.pas" diff --git a/ReleaseGenerators/sect_PT4.nsh b/ReleaseGenerators/sect_PT4.nsh index 0de1e4625..46f119c9b 100644 --- a/ReleaseGenerators/sect_PT4.nsh +++ b/ReleaseGenerators/sect_PT4.nsh @@ -32,6 +32,10 @@ Section $(DESC_PT4) PT4 ${AddFile} "loadpabc_en.dat" File "PT4\pt4pabc.dll" ${AddFile} "pt4pabc.dll" + File "PT4\pt4pabc2.dll" + ${AddFile} "pt4pabc2.dll" + File "PT4\xpt4pabc2.dll" + ${AddFile} "xpt4pabc2.dll" File "PT4\PT4nld4p.dll" ${AddFile} "PT4nld4p.dll" File "PT4\PT4Demo.exe" @@ -61,55 +65,34 @@ Section $(DESC_PT4) PT4 SetOutPath "$INSTDIR\PT4\Lib" - File "PT4\Lib\PT4ExamBegin_ru.dll" - ${AddFile} "PT4ExamBegin_ru.dll" - File "PT4\Lib\PT4ExamTaskC_ru.dll" - ${AddFile} "PT4ExamTaskC_ru.dll" + File "PT4\Lib\PT-Ext.dll" ${AddFile} "PT-Ext.dll" + File "PT4\Lib\PT4ExamBegin.dll" + ${AddFile} "PT4ExamBegin.dll" + File "PT4\Lib\PT4ExamBegin_ru.dll" + ${AddFile} "PT4ExamBegin_ru.dll" + + File "PT4\Lib\PT4ExamCheck.dll" + ${AddFile} "PT4ExamCheck.dll" File "PT4\Lib\PT4ExamCheck_ru.dll" ${AddFile} "PT4ExamCheck_ru.dll" + + File "PT4\Lib\PT4ExamTaskC.dll" + ${AddFile} "PT4ExamTaskC.dll" + File "PT4\Lib\PT4ExamTaskC_ru.dll" + ${AddFile} "PT4ExamTaskC_ru.dll" + File "PT4\Lib\PT4LinqBegin.dll" ${AddFile} "PT4LinqBegin.dll" File "PT4\Lib\PT4LinqObj.dll" ${AddFile} "PT4LinqObj.dll" File "PT4\Lib\PT4LinqXml.dll" ${AddFile} "PT4LinqXml.dll" + File "PT4\Lib\PT4TMDemoAbc.dll" ${AddFile} "PT4TMDemoAbc.dll" - File "PT4\Lib\PT4_.txt" - ${AddFile} "PT4_.txt" - File "PT4\Lib\PT4_Exam.txt" - ${AddFile} "PT4_Exam.txt" - File "PT4\Lib\PT4_LinqB.txt" - ${AddFile} "PT4_LinqB.txt" - File "PT4\Lib\PT4_LinqO.txt" - ${AddFile} "PT4_LinqO.txt" - File "PT4\Lib\PT4_LinqX.txt" - ${AddFile} "PT4_LinqX.txt" - File "PT4\Lib\PT4ExamBegin_ru.txt" - ${AddFile} "PT4ExamBegin_ru.txt" - File "PT4\Lib\PT4ExamCheck_ru.txt" - ${AddFile} "PT4ExamCheck_ru.txt" - File "PT4\Lib\PT4LinqBegin[PascalABC].txt" - ${AddFile} "PT4LinqBegin[PascalABC].txt" - File "PT4\Lib\PT4LinqObj[PascalABC].txt" - ${AddFile} "PT4LinqObj[PascalABC].txt" - File "PT4\Lib\PT4LinqXml[PascalABC].txt" - ${AddFile} "PT4LinqXml[PascalABC].txt" - File "PT4\Lib\PT4-CWA-1Begin.txt" - ${AddFile} "PT4-CWA-1Begin.txt" - File "PT4\Lib\PT4-CWA-2Robot.txt" - ${AddFile} "PT4-CWA-2Robot.txt" - File "PT4\Lib\PT4-CWA-4Assign.txt" - ${AddFile} "PT4-CWA-4Assign.txt" - File "PT4\Lib\PT4-CWA-5For.txt" - ${AddFile} "PT4-CWA-5For.txt" - File "PT4\Lib\PT4-XRB.txt" - ${AddFile} "PT4-XRB.txt" - File "PT4\Lib\PT4__.txt" - ${AddFile} "PT4__.txt" File "PT4\Lib\PT4ArrFilter.dll" ${AddFile} "PT4ArrFilter.dll" @@ -119,8 +102,6 @@ Section $(DESC_PT4) PT4 ${AddFile} "PT4ArrGen.dll" File "PT4\Lib\PT4ArrObj.dll" ${AddFile} "PT4ArrObj.dll" - File "PT4\Lib\PT4ArrObj.txt" - ${AddFile} "PT4ArrObj.txt" File "PT4\Lib\PT4ArrOp.dll" ${AddFile} "PT4ArrOp.dll" File "PT4\Lib\PT4ArrShift.dll" @@ -131,25 +112,40 @@ Section $(DESC_PT4) PT4 ${AddFile} "PT4ArrTransf.dll" File "PT4\Lib\PT4ObjArray.dll" ${AddFile} "PT4ObjArray.dll" - File "PT4\Lib\PT4ObjArray.txt" - ${AddFile} "PT4ObjArray.txt" + File "PT4\Lib\PT4ZArray.dll" ${AddFile} "PT4ZArray.dll" + File "PT4\Lib\PT4ZArray_ru.dll" + ${AddFile} "PT4ZArray_ru.dll" + File "PT4\Lib\PT4ZFunc.dll" + ${AddFile} "PT4ZFunc.dll" + File "PT4\Lib\PT4ZFunc_ru.dll" + ${AddFile} "PT4ZFunc_ru.dll" File "PT4\Lib\PT4ZMatrix.dll" ${AddFile} "PT4ZMatrix.dll" + File "PT4\Lib\PT4ZMatrix_ru.dll" + ${AddFile} "PT4ZMatrix_ru.dll" File "PT4\Lib\PT4ZMinmax.dll" ${AddFile} "PT4ZMinmax.dll" + File "PT4\Lib\PT4ZMinmax_ru.dll" + ${AddFile} "PT4ZMinmax_ru.dll" File "PT4\Lib\PT4ZSeries.dll" ${AddFile} "PT4ZSeries.dll" + File "PT4\Lib\PT4ZSeries_ru.dll" + ${AddFile} "PT4ZSeries_ru.dll" - File "PT4\Lib\PT4AExam.dll" - ${AddFile} "PT4AExam.dll" + File "PT4\Lib\PT4AArray.dll" + ${AddFile} "PT4AArray.dll" File "PT4\Lib\PT4ABegin.dll" ${AddFile} "PT4ABegin.dll" File "PT4\Lib\PT4ABoolean.dll" ${AddFile} "PT4ABoolean.dll" File "PT4\Lib\PT4ACase.dll" ${AddFile} "PT4ACase.dll" + File "PT4\Lib\PT4AExam.dll" + ${AddFile} "PT4AExam.dll" + File "PT4\Lib\PT4AFunc.dll" + ${AddFile} "PT4AFunc.dll" File "PT4\Lib\PT4AIf.dll" ${AddFile} "PT4AIf.dll" File "PT4\Lib\PT4AInteger.dll" @@ -162,12 +158,136 @@ Section $(DESC_PT4) PT4 ${AddFile} "PT4AWhile.dll" File "PT4\Lib\PT4AProc.dll" ${AddFile} "PT4AProc.dll" - File "PT4\Lib\PT4AFunc.dll" - ${AddFile} "PT4AFunc.dll" - File "PT4\Lib\PT4AArray.dll" - ${AddFile} "PT4AArray.dll" + + File "PT4\Lib\xPT4AArray.dll" + ${AddFile} "xPT4AArray.dll" + File "PT4\Lib\xPT4ABegin.dll" + ${AddFile} "xPT4ABegin.dll" + File "PT4\Lib\xPT4ABoolean.dll" + ${AddFile} "xPT4ABoolean.dll" + File "PT4\Lib\xPT4ACase.dll" + ${AddFile} "xPT4ACase.dll" + File "PT4\Lib\xPT4AExam.dll" + ${AddFile} "xPT4AExam.dll" + File "PT4\Lib\xPT4AFunc.dll" + ${AddFile} "xPT4AFunc.dll" + File "PT4\Lib\xPT4AIf.dll" + ${AddFile} "xPT4AIf.dll" + File "PT4\Lib\xPT4AInteger.dll" + ${AddFile} "xPT4AInteger.dll" + File "PT4\Lib\xPT4ALoopFor.dll" + ${AddFile} "xPT4ALoopFor.dll" + File "PT4\Lib\xPT4AProc.dll" + ${AddFile} "xPT4AProc.dll" + File "PT4\Lib\xPT4ArrFilter.dll" + ${AddFile} "xPT4ArrFilter.dll" + File "PT4\Lib\xPT4ArrFind.dll" + ${AddFile} "xPT4ArrFind.dll" + File "PT4\Lib\xPT4ArrGen.dll" + ${AddFile} "xPT4ArrGen.dll" + File "PT4\Lib\xPT4ArrObj.dll" + ${AddFile} "xPT4ArrObj.dll" + File "PT4\Lib\xPT4ArrOp.dll" + ${AddFile} "xPT4ArrOp.dll" + File "PT4\Lib\xPT4ArrShift.dll" + ${AddFile} "xPT4ArrShift.dll" + File "PT4\Lib\xPT4ArrSlice.dll" + ${AddFile} "xPT4ArrSlice.dll" + File "PT4\Lib\xPT4ArrTransf.dll" + ${AddFile} "xPT4ArrTransf.dll" + File "PT4\Lib\xPT4ASeries.dll" + ${AddFile} "xPT4ASeries.dll" + File "PT4\Lib\xPT4AWhile.dll" + ${AddFile} "xPT4AWhile.dll" + File "PT4\Lib\xPT4ExamBegin.dll" + ${AddFile} "xPT4ExamBegin.dll" + File "PT4\Lib\xPT4ExamCheck.dll" + ${AddFile} "xPT4ExamCheck.dll" + File "PT4\Lib\xPT4ExamTaskC.dll" + ${AddFile} "xPT4ExamTaskC.dll" + File "PT4\Lib\xPT4LinqBegin.dll" + ${AddFile} "xPT4LinqBegin.dll" + File "PT4\Lib\xPT4LinqObj.dll" + ${AddFile} "xPT4LinqObj.dll" + File "PT4\Lib\xPT4LinqXml.dll" + ${AddFile} "xPT4LinqXml.dll" + File "PT4\Lib\xPT4ObjArray.dll" + ${AddFile} "xPT4ObjArray.dll" + File "PT4\Lib\xPT4TMDemoAbc.dll" + ${AddFile} "xPT4TMDemoAbc.dll" + File "PT4\Lib\xPT4ZArray.dll" + ${AddFile} "xPT4ZArray.dll" + File "PT4\Lib\xPT4ZArray_ru.dll" + ${AddFile} "xPT4ZArray_ru.dll" + File "PT4\Lib\xPT4ZFunc.dll" + ${AddFile} "xPT4ZFunc.dll" + File "PT4\Lib\xPT4ZFunc_ru.dll" + ${AddFile} "xPT4ZFunc_ru.dll" + File "PT4\Lib\xPT4ZMatrix.dll" + ${AddFile} "xPT4ZMatrix.dll" + File "PT4\Lib\xPT4ZMatrix_ru.dll" + ${AddFile} "xPT4ZMatrix_ru.dll" + File "PT4\Lib\xPT4ZMinmax.dll" + ${AddFile} "xPT4ZMinmax.dll" + File "PT4\Lib\xPT4ZMinmax_ru.dll" + ${AddFile} "xPT4ZMinmax_ru.dll" + File "PT4\Lib\xPT4ZSeries.dll" + ${AddFile} "xPT4ZSeries.dll" + File "PT4\Lib\xPT4ZSeries_ru.dll" + ${AddFile} "xPT4ZSeries_ru.dll" + + + File "PT4\Lib\PT4_.txt" + ${AddFile} "PT4_.txt" + File "PT4\Lib\PT4__.txt" + ${AddFile} "PT4__.txt" + File "PT4\Lib\PT4_Exam.txt" + ${AddFile} "PT4_Exam.txt" + File "PT4\Lib\PT4_LinqB.txt" + ${AddFile} "PT4_LinqB.txt" + File "PT4\Lib\PT4_LinqO.txt" + ${AddFile} "PT4_LinqO.txt" + File "PT4\Lib\PT4_LinqX.txt" + ${AddFile} "PT4_LinqX.txt" + + File "PT4\Lib\PT4ExamBegin.txt" + ${AddFile} "PT4ExamBegin.txt" + File "PT4\Lib\PT4ExamCheck.txt" + ${AddFile} "PT4ExamCheck.txt" + File "PT4\Lib\PT4ExamTaskC.txt" + ${AddFile} "PT4ExamTaskC.txt" + File "PT4\Lib\PT4ExamBegin_ru.txt" + ${AddFile} "PT4ExamBegin_ru.txt" + File "PT4\Lib\PT4ExamCheck_ru.txt" + ${AddFile} "PT4ExamCheck_ru.txt" + File "PT4\Lib\PT4ExamTaskC_ru.txt" + ${AddFile} "PT4ExamTaskC_ru.txt" + + File "PT4\Lib\PT4LinqBegin[PascalABC].txt" + ${AddFile} "PT4LinqBegin[PascalABC].txt" + File "PT4\Lib\PT4LinqObj[PascalABC].txt" + ${AddFile} "PT4LinqObj[PascalABC].txt" + File "PT4\Lib\PT4LinqXml[PascalABC].txt" + ${AddFile} "PT4LinqXml[PascalABC].txt" + + File "PT4\Lib\PT4-CWA-1Begin.txt" + ${AddFile} "PT4-CWA-1Begin.txt" + File "PT4\Lib\PT4-CWA-2Robot.txt" + ${AddFile} "PT4-CWA-2Robot.txt" + File "PT4\Lib\PT4-CWA-4Assign.txt" + ${AddFile} "PT4-CWA-4Assign.txt" + File "PT4\Lib\PT4-CWA-5For.txt" + ${AddFile} "PT4-CWA-5For.txt" + File "PT4\Lib\PT4-XRB.txt" + ${AddFile} "PT4-XRB.txt" + + File "PT4\Lib\PT4ArrObj.txt" + ${AddFile} "PT4ArrObj.txt" + File "PT4\Lib\PT4ObjArray.txt" + ${AddFile} "PT4ObjArray.txt" + SetOutPath "$INSTDIR\PT4\Lib\Graph" File "PT4\Lib\Graph\*.png" diff --git a/bin/Lib/PT4.pas b/bin/Lib/PT4.pas index d008361d7..9046b0d05 100644 --- a/bin/Lib/PT4.pas +++ b/bin/Lib/PT4.pas @@ -3,7 +3,7 @@ unit PT4; //------------------------------------------------------------------------------ // Модуль для подключения задачника Programming Taskbook -// Версия 4.18 +// Версия 4.23 // Copyright © 2006-2008 DarkStar, SSM // Copyright © 2010 М.Э.Абрамян, дополнения к версии 1.3 // Copyright © 2014-2015 М.Э.Абрамян, дополнения к версии 4.13 @@ -12,11 +12,13 @@ unit PT4; // Copyright © 2017 М.Э.Абрамян, дополнения к версии 4.17 // Copyright © 2018 М.Э.Абрамян, дополнения к версии 4.18 // Copyright © 2019 М.Э.Абрамян, дополнения к версии 4.19 -// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2019 +// Copyright © 2021 М.Э.Абрамян, дополнения к версии 4.21 +// Copyright © 2023 М.Э.Абрамян, дополнения к версии 4.23 +// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2023 //------------------------------------------------------------------------------ {$apptype windows} -{$platformtarget x86} +//{$platformtarget x86} interface @@ -47,13 +49,21 @@ type Node = class(IDisposable) private - isAllocMem: boolean; +(* isAllocMem: boolean; isDisposed: boolean; x: InternalNode; addr: IntPtr; - constructor Create(x: InternalNode; a: IntPtr); + constructor Create(x: InternalNode; a: IntPtr);*) + a: integer; + disposed: boolean; procedure Init(Data: integer; Next,Prev,Left,Right,Parent: Node); - procedure internalDispose(disposing: boolean); + constructor Create(addr, none: integer); + static function NodeToInt(n: Node): integer; + static function IntToNode(a:integer): Node; +// procedure internalDispose(disposing: boolean); + function getNodeProp(n: integer; name: string): Node; + procedure setNodeProp(n: integer; name: string; value: Node); + procedure setNext(value: Node); function getNext: Node; procedure setPrev(value: Node); @@ -81,7 +91,7 @@ type property Parent: Node read getParent write SetParent; property Data: integer read getData write SetData; end; - + var TaskName: string; /// Вывести формулировку задания @@ -809,7 +819,7 @@ function GetSolutionInfo: string; implementation // == Версия 4.18. Дополнения == -uses ABCDatabases; +uses ABCDatabases, System.Text; // == Версия 4.18. Конец дополнений == const @@ -831,33 +841,141 @@ procedure PutBoolean(val: boolean); forward; procedure PutNode(val: Node); forward; procedure PutPNode(val: PNode); forward; -procedure StartPT(options: integer); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'startpt'; -procedure FreePT; external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'freept'; -function CheckPT(var res: integer):string;external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'checkptf'; -procedure RaisePT(s1,s2: string); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'raisept'; -procedure Task__(name: string); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'task'; -procedure GetR(var param: real); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'getr'; -procedure PutR(param: real); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'putr'; -procedure GetN(var param: integer); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'getn'; -procedure PutN(param: integer); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'putn'; -procedure GetC(var param: char); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'getc'; -procedure PutC(param: char); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'putc'; -procedure _GetS(param: System.Text.StringBuilder);external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'gets'; -procedure PutS(param: string); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'puts'; -procedure _GetB(var param: integer); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'getb'; -procedure _PutB(param: integer); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'putb'; -procedure _GetP(var param: IntPtr); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'getp'; -procedure _PutP(param: IntPtr); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'putp'; -procedure DisposeP(sNode: IntPtr); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'disposep'; -function FinishPT(): integer; external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'finishpt'; // == 4.13 == -procedure _GetSolutionInfo(info: System.Text.StringBuilder);external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'getsolutioninfo'; +procedure StartPT(options: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'startpt'; +procedure FreePT; external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'freept'; +procedure _CheckPT(InfoS: array of byte; var InfoT: integer);external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'checkpt'; //2021.05 +procedure _RaisePT(s1,s2: array of byte); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'raisept'; +procedure _Task(name: string); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'task'; +procedure GetR(var param: real); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'getr'; +procedure PutR(param: real); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'putr'; +procedure GetN(var param: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'getn'; +procedure PutN(param: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'putn'; +procedure GetC(var param: char); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'getc'; +procedure PutC(param: char); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'putc'; +procedure _GetS(param: array of byte);external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'gets'; +procedure _PutS(param: array of byte); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'puts'; +procedure _GetB(var param: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'getb'; +procedure _PutB(param: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'putb'; +procedure _GetP(var param: IntPtr); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'getp'; +procedure _PutP(param: IntPtr); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'putp'; +procedure _PutNode(param: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'nodeputp'; +procedure DisposeP(sNode: IntPtr); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'disposep'; +procedure _NodeNew(var n: integer; data, next, prev, left, right, parent: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'nodenew'; +procedure _NodeGetP(var n: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'nodegetp'; +procedure _NodePutP(n: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'nodeputp'; +procedure _NodeGetF(n, fn: integer; var f, err: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'nodegetf'; +procedure _NodeSetF(n, fn, f: integer; var err: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'nodesetf'; +procedure _NodeDispose(n: integer; var err: integer); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'nodedispose'; +function FinishPT(): integer; external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'finishpt'; // == 4.13 == +procedure _GetSolutionInfo(info: array of byte);external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'getsolutioninfo'; + +//2023.03> + +function ToBytes(s: string): array of byte; +begin + var utf8 := Encoding.Unicode; + var ansi := Encoding.GetEncoding(1251); + result := Encoding.Convert(utf8, ansi, utf8.GetBytes(s)); +end; + +function FromBytes(a: array of byte): string; +begin + var utf8 := Encoding.Unicode; + var ansi := Encoding.GetEncoding(1251); + var res := Encoding.Convert(ansi, utf8, a); + result := utf8.GetString(res); + result := result.substring(0, result.IndexOf(#0)); +end; + +//2023.03< + + +//2021.05 +procedure SetLibLoader(p: IntPtr); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'setlibloader'; // == 4.21 == +var activate, inittaskgroup: System.Reflection.MethodInfo; + +function GetTopic(LibName: string): string; +begin + var s := System.IO.Path.GetFileNameWithoutExtension(LibName).Substring(4); + var p := s.LastIndexOf('_'); + if p > -1 then + s := s.Substring(0, p); + result := s; +end; + +function LoadNETLib(LibName: string; Step: integer): integer; +begin + if Step = 1 then + begin + var lib: System.Reflection.Assembly := nil; + var libClass: System.Type := nil; + activate := nil; + inittaskgroup := nil; + try + lib := System.Reflection.Assembly.LoadFrom(LibName+'.dll'); + LibName := GetTopic(LibName); + libClass := lib.GetType('xPT4'+LibName + '.xPT4' + LibName); + if libClass = nil then + begin + LibName := LibName.ToUpper(); + foreach var t in lib.GetTypes do + begin + if t.FullName.ToUpper = 'XPT4'+LibName + '.XPT4' + LibName then + begin + libClass := t; + break; + end; + end; + end; + if libClass = nil then + begin + result := 1; + exit; + end; + inittaskgroup := libClass.GetMethod('inittaskgroup'); + activate := libClass.GetMethod('activate'); + if (inittaskgroup <> nil) and (activate = nil) then + result := 2 // dll and inittaskgroup found, activate not found + else if (inittaskgroup = nil) or (activate = nil) then + result := 3 // dll found, activate or inittaskgroup not found + else + result := 0; // 1st step OK + except + result := 4; + end; + end + else + begin + if (activate <> nil) and (inittaskgroup <> nil) then + try + activate.Invoke(nil, Arr(LibName as Object)); + inittaskgroup.Invoke(nil, nil); + result := 0; // 2nd step OK + except + result := 2; // error while run methods + end + else + result := 1; // empty methods + end; +end; + +var PLoadNETLib := LoadNETLib; procedure Task(name: string); begin - Task__(name); + SetLibLoader(Marshal.GetFunctionPointerForDelegate(PLoadNETLib)); + _Task(name); TaskName := name; end; +function CheckPT(var res: integer): string; +begin + var InfoS := new byte[200]; + _CheckPT(InfoS, res); + result := FromBytes(InfoS); +end; + + procedure Dispose(p: pointer); begin DisposeP(IntPtr(p)); @@ -867,18 +985,7 @@ end; // ----------------------------------------------------- // Node // ----------------------------------------------------- -constructor Node.Create(x: InternalNode; a: IntPtr); -begin - Self.x.Data := x.Data; - Self.x.Next := x.Next; - Self.x.Prev := x.Prev; - Self.x.Left := x.Left; - Self.x.Right := x.Right; - Self.x.Parent := x.Parent; - addr := a; - isAllocMem := false; - isDisposed := false; -end; +var nodes := new Dictionary; constructor Node.Create; begin @@ -912,234 +1019,107 @@ end; procedure Node.Dispose; begin - GC.SuppressFinalize(self); - internalDispose(true); + if disposed then + exit; + var err := 0; + _NodeDispose(a, err); + disposed := true; +end; + +constructor Node.Create(addr, none: integer); +begin + a := addr; + disposed := false; + nodes[a] := Self; +end; + +class function Node.NodeToInt(n: Node): integer; +begin + if n = nil then + result := 0 + else + result := n.a; +end; + +class function Node.IntToNode(a: integer): Node; +begin + if a = 0 then + result := nil + else if nodes.ContainsKey(a) then + result := nodes[a] + else + result := new Node(a, 0); end; procedure Node.Init(Data: integer; Next,Prev,Left,Right,Parent: Node); begin - x.Data := Data; - - if Next = nil then - x.Next := IntPtr.Zero - else x.Next := Next.addr; - - if Prev = nil then - x.Prev := IntPtr.Zero - else x.Prev := Prev.addr; - - if Left = nil then - x.Left := IntPtr.Zero - else x.Left := Left.addr; - - if Right = nil then - x.Right := IntPtr.Zero - else x.Right := Right.addr; - - if Parent = nil then - x.Parent := IntPtr.Zero - else x.Parent := Parent.addr; - - addr := Marshal.AllocHGlobal(sizeof(InternalNode)); - Marshal.StructureToPtr(x as object, addr, false); - isAllocMem := true; - isDisposed := false; - loadNodes.Add(self); + var n: integer; + _NodeNew(n, data, NodeToInt(next), NodeToInt(prev), + NodeToInt(left), NodeToInt(right), NodeToInt(parent)); + a := n; + disposed := false; + nodes[a] := Self; end; -procedure Node.setNext(value:Node); + +function Node.getNodeProp(n: integer; name: string): Node; begin - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - if value = nil then - begin - x.Next := IntPtr.Zero; - Marshal.StructureToPtr(x as object, addr, isAllocMem); - end else - begin - x.Next := value.addr; - Marshal.StructureToPtr(x as object, addr, isAllocMem); - end; + if disposed then + raise new ObjectDisposedException('cannot access a disposed Node'); + var val, err: integer;; + _NodeGetF(a, n, val, err); + if err <> 0 then + raise new ArgumentException('cannot get the ' + name + ' property'); + result := IntToNode(val); +end; + +procedure Node.setNodeProp(n: integer; name: string; value: Node); +begin + if disposed then + raise new ObjectDisposedException('cannot access a disposed Node'); + var err: integer;; + _NodeSetF(a, n, NodeToInt(value), err); + if err <> 0 then + raise new ArgumentException('cannot set the ' + name + ' property'); end; -function Node.getNext:Node; -var tmp: IntPtr; - tmpNode: Node; -begin - result := nil; - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - if x.Next <> IntPtr.Zero then - begin - tmp := x.Next; - for var i:=0 to loadNodes.Count-1 do - if tmp.Equals(Node(loadNodes[i]).addr) then - result:=Node(loadNodes[i]); - if result=nil then - begin - tmpNode := new Node(InternalNode(Marshal.PtrToStructure(tmp,typeof(InternalNode))), tmp); - loadNodes.Add(tmpNode); - result := tmpNode; - end; - end; -end; +procedure Node.setNext(value: Node) := SetNodeProp(1, 'Next', value); +function Node.getNext := GetNodeProp(1, 'Next'); -procedure Node.setPrev(value: Node); -begin - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - if value = nil then - begin - x.Prev := IntPtr.Zero; - Marshal.StructureToPtr(x as object, addr, isAllocMem); - end else - begin - x.Prev := value.addr; - Marshal.StructureToPtr(x as object, addr, isAllocMem); - end; -end; +procedure Node.setPrev(value: Node) := SetNodeProp(2, 'Prev', value); +function Node.getPrev := GetNodeProp(2, 'Prev'); -function Node.getPrev: Node; -var tmp: IntPtr; - tmpNode:Node; -begin - result := nil; - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - if x.Prev <> IntPtr.Zero then begin - tmp := x.Prev; - for var i:=0 to loadNodes.Count-1 do - if tmp.Equals(Node(loadNodes[i]).addr) then - result:=Node(loadNodes[i]); - if result=nil then begin - tmpNode := new Node(InternalNode(Marshal.PtrToStructure(tmp,typeof(InternalNode))), tmp); - loadNodes.Add(tmpNode); - result := tmpNode; - end; - end; -end; +procedure Node.setLeft(value: Node) := SetNodeProp(3, 'Left', value); +function Node.getLeft := GetNodeProp(3, 'Left'); -procedure Node.setLeft(value: Node); -begin - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - if value = nil then - begin - x.Left := IntPtr.Zero; - Marshal.StructureToPtr(x as object, addr, isAllocMem); - end else - begin - x.Left := value.addr; - Marshal.StructureToPtr(x as object, addr, isAllocMem); - end; -end; +procedure Node.setRight(value: Node) := SetNodeProp(4, 'Right', value); +function Node.getRight := GetNodeProp(4, 'Right'); -function Node.getLeft: Node; -var tmp: IntPtr; - tmpNode:Node; -begin - result := nil; - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - if x.Left <> IntPtr.Zero then begin - tmp := x.Left; - for var i:=0 to loadNodes.Count-1 do - if tmp.Equals(Node(loadNodes[i]).addr) then - result:=Node(loadNodes[i]); - if result=nil then begin - tmpNode := new Node(InternalNode(Marshal.PtrToStructure(tmp,typeof(InternalNode))), tmp); - loadNodes.Add(tmpNode); - result := tmpNode; - end; - end; -end; - -procedure Node.setRight(value: Node); -begin - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - if value = nil then - begin - x.Right := IntPtr.Zero; - Marshal.StructureToPtr(x as object, addr, isAllocMem); - end else - begin - x.Right := value.addr; - Marshal.StructureToPtr(x as object, addr, isAllocMem); - end; -end; - -function Node.getRight: Node; -var tmp: IntPtr; - tmpNode:Node; -begin - result := nil; - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - if x.Right <> IntPtr.Zero then begin - tmp := x.Right; - for var i:=0 to loadNodes.Count-1 do - if tmp.Equals(Node(loadNodes[i]).addr) then - result:=Node(loadNodes[i]); - if result=nil then begin - tmpNode := new Node(InternalNode(Marshal.PtrToStructure(tmp,typeof(InternalNode))), tmp); - loadNodes.Add(tmpNode); - result := tmpNode; - end; - end; -end; - -procedure Node.setParent(value: Node); -begin - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - if value = nil then - begin - x.Parent := IntPtr.Zero; - Marshal.StructureToPtr(x as object, addr, isAllocMem); - end else - begin - x.Parent := value.addr; - Marshal.StructureToPtr(x as object, addr, isAllocMem); - end; -end; - -function Node.getParent: Node; -var tmp: IntPtr; - tmpNode:Node; -begin - result := nil; - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - if x.Parent <> IntPtr.Zero then begin - tmp := x.Parent; - for var i:=0 to loadNodes.Count-1 do - if tmp.Equals(Node(loadNodes[i]).addr) then - result:=Node(loadNodes[i]); - if result=nil then begin - tmpNode := new Node(InternalNode(Marshal.PtrToStructure(tmp,typeof(InternalNode))), tmp); - loadNodes.Add(tmpNode); - result := tmpNode; - end; - end; -end; +procedure Node.setParent(value: Node) := SetNodeProp(5, 'Parent', value); +function Node.getParent := GetNodeProp(5, 'Parent'); procedure Node.setData(value: integer); begin - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - self.x.Data := value; - Marshal.StructureToPtr(x as object, addr, isAllocMem); + if disposed then + raise new ObjectDisposedException('cannot access a disposed Node'); + var err: integer; + _NodeSetF(a, 0, value, err); + if err <> 0 then + raise new ArgumentException('cannot set the Data property'); end; function Node.getData: integer; begin - if isDisposed then - raise new ObjectDisposedException(ToString, eMessage); - result := self.x.Data; + if disposed then + raise new ObjectDisposedException('cannot access a disposed Node'); + var val, err: integer; + _NodeGetF(a, 0, val, err); + if err <> 0 then + raise new ArgumentException('cannot get the Data property'); + result := val; end; -procedure Node.internalDispose(disposing: boolean); +(*procedure Node.internalDispose(disposing: boolean); begin if not isDisposed then //lock(self) @@ -1151,6 +1131,144 @@ begin isDisposed := true; end; end; +*) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + procedure internalWrite(args: array of object); forward; @@ -1204,11 +1322,15 @@ begin end; function GetString: string; -var val: System.Text.StringBuilder; begin - val := new System.Text.StringBuilder(200);//TODO почему 200? + var val := new byte[200]; _gets(val); - result := val.ToString; + result := FromBytes(val); +end; + +procedure PutS(param: string); +begin + _puts(ToBytes(param)); end; function GetBool: boolean; @@ -1224,42 +1346,42 @@ begin end; function GetNode: Node; - procedure GetPtr(var sNode:InternalNode; var pNode: IntPtr); - var p:IntPtr; - begin - p := IntPtr.Zero; - _GetP(p); - pNode := p; - if p <> IntPtr.Zero then - sNode := InternalNode(Marshal.PtrToStructure(p, typeof(InternalNode))); - end; -var - p: IntPtr; - sNode: InternalNode; begin - //raise new NotSupportedException('Работа с динамическими структурами задачника PT4 не поддерживается в этой версии компилятора. Исправление ошибки планируется в следуйщей версии'); - //result := new PT4Node(sNode, p);// fixme здесь ошибка генерации кода! - p := IntPtr.Zero; - sNode.Data := 0; - sNode.Next := IntPtr.Zero; - sNode.Prev := IntPtr.Zero; - sNode.Left := IntPtr.Zero; - sNode.Right := IntPtr.Zero; - sNode.Parent := IntPtr.Zero; - GetPtr(sNode, p); - if p = IntPtr.Zero then - result := nil - else begin - for var i:=0 to loadNodes.Count-1 do - if sNode=Node(loadNodes[i]).x then - result := Node(loadNodes[i]); - if result = nil then begin - result := new Node(sNode, p); - loadNodes.Add(result); - end; - end; + var n: integer; + _NodeGetP(n); + result := Node.IntToNode(n); end; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + function GetPNode: PNode; var ip: IntPtr; begin @@ -1863,11 +1985,12 @@ end; procedure Put(param: Node); begin - PutP(param); + if param = nil then + _PutNode(0) + else + _PutNode(param.a); end; - - // == Версия 4.17. Конец дополнений == @@ -1902,17 +2025,17 @@ begin end; procedure PutNode(val: Node); -var p: IntPtr; begin - p := IntPtr.Zero; - if val <> nil then begin - if val.isDisposed then - raise new ObjectDisposedException(val.ToString, eMessage); - p := val.addr; - end; - _PutP(p); + if val = nil then + _PutNode(0) + else + _PutNode(val.a); end; + + + + procedure PutPNode(val: PNode); var pp: pointer; begin @@ -1923,6 +2046,11 @@ end; // ----------------------------------------------------- // Генерация исключений // ----------------------------------------------------- +procedure RaisePT(s1, s2: string); +begin + _RaisePT(ToBytes(s1), ToBytes(s2)); +end; + procedure RaisePTAndCheckPT(e: Exception); begin RaisePT(e.GetType.ToString, e.Message); @@ -2226,7 +2354,21 @@ var var _Width: integer := 0; -procedure ShowStr(s: string); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'show'; + +procedure _show(s: array of byte); external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'show'; + + +procedure ShowStr(s: string); +begin + var utf8 := new UTF8Encoding(); + var byteCount := utf8.GetByteCount(s); + var bytes := new Byte[byteCount]; + var bytesEncodedCount := utf8.GetBytes(s, 0, s.Length, bytes, 0); + _show(bytes); + + +// _show(ToBytes(s)); +end; procedure Show(s: string); begin @@ -2555,7 +2697,7 @@ end; // == Конец дополнений к версии 4.18 == -procedure HideTask; external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'hidetask'; +procedure HideTask; external '%PABCSYSTEM%\PT4\xPT4PABC2.dll' name 'hidetask'; procedure SetPrecision(N: Integer); begin @@ -3113,9 +3255,9 @@ end; function GetSolutionInfo: string; begin - var val := new System.Text.StringBuilder(500); + var val := new byte[500]; _getsolutioninfo(val); - result := val.ToString; + result := FromBytes(val); end; initialization diff --git a/bin/Lib/PT4MakerNetX.pas b/bin/Lib/PT4MakerNetX.pas index 3517d552d..46fbe76cf 100644 --- a/bin/Lib/PT4MakerNetX.pas +++ b/bin/Lib/PT4MakerNetX.pas @@ -1,9 +1,10 @@ -/// Конструктор учебных заданий для задачника Programming Taskbook. -/// Версия 1.7 от 28.10.2020 (С) М. Э. Абрамян, 2016-2020. + +/// Конструктор учебных заданий для задачника Programming Taskbook. +/// Версия 1.9 от 26.03.2023 (С) М. Э. Абрамян, 2016-2023. /// Все компоненты конструктора могут вызываться либо как классовые методы класса pt, /// либо как обычные константы и процедуры. unit PT4MakerNetX; - + interface const @@ -20,12 +21,14 @@ const /// формулировки должны разделяться символами #13, #10 или #13#10. procedure NewTask(topic, tasktext: string); + /// Процедура, с которой должно начинаться определение нового задания. /// Должна вызываться в процедуре с именем, начинающемся с текста Task. /// Параметр tasktext содержит формулировку задания; отдельные строки /// формулировки должны разделяться символами #13, #10 или #13#10. procedure NewTask(tasktext: string); + /// Добавляет комментарий в новой строке раздела исходных даннных. procedure DataComm(comm: string); @@ -124,26 +127,48 @@ procedure SetRequiredDataCount(n: integer); /// (запуски нумеруются от 1). function CurrentTest: integer; -/// Генерирует случайное целов в диапазоне от M до N включительно. +/// Генерирует случайное целое число в диапазоне от M до N включительно. /// Если M >= N, то возвращает M. function Random(M, N: integer): integer; -/// Генерирует случайное вещественное на промежутке [A, B). +/// Генерирует случайное вещественное число на промежутке [A, B). /// Если промежуток [A, B) пуст, то возвращает A. function Random(A, B: real): real; +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с одним дробным знаком и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до одного дробного знака и снабженное добавкой порядка 1e-7. +function Random1(A, B: real): real; + +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с двумя дробными знаками и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до двух дробных знаков и снабженное добавкой порядка 1e-7. +function Random2(A, B: real): real; + /// Генерирует случайную строку длины len, состоящую /// из цифр и строчных (т.е. маленьких) латинских букв. function RandomName(len: integer): string; /// Создает новую группу с кратким описанием GroupDescription, /// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. -/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4). +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4 +/// и возможных суффиксов _ru или _en). /// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. /// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую /// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer := 0); +/// Создает новую группу с кратким описанием GroupDescription, английским описанием GroupEnDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer := 0); + /// Обеспечивает регистрацию созданной группы в электронном задачнике. /// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string), /// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные). @@ -154,6 +179,11 @@ procedure ActivateNET(S: string); /// в процедуре с именем, начинающемся с текста Task. procedure UseTask(GroupName: string; TaskNumber: integer); +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); + /// Возвращает массив из 116 русских слов. function GetWords: array of string; /// Возвращает массив из 116 английских слов. @@ -163,10 +193,12 @@ function GetSentences: array of string; /// Возвращает массив из 61 английского предложения. function GetEnSentences: array of string; /// Возвращает массив из 85 русских многострочных текстов. -/// Каждая строка текста оканчивается символами #13#10. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. function GetTexts: array of string; /// Возвращает массив из 85 английских многострочных текстов. -/// Каждая строка текста оканчивается символами #13#10. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. function GetEnTexts: array of string; /// Возвращает случайное русское слово из массива, @@ -183,11 +215,13 @@ function RandomSentence: string; function RandomEnSentence: string; /// Возвращает случайный русский многострочный текст из массива, /// входящего в конструктор учебных заданий. -/// Каждая строка текста оканчивается символами #13#10. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. function RandomText: string; /// Возвращает случайный английский многострочный текст из массива, /// входящего в конструктор учебных заданий. -/// Каждая строка текста оканчивается символами #13#10. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. function RandomEnText: string; @@ -284,6 +318,7 @@ class procedure NewTask(topic, tasktext: string); begin PT4MakerNetX.NewTask(topic, tasktext); end; + /// Процедура, с которой должно начинаться определение нового задания. /// Должна вызываться в процедуре с именем, начинающемся с текста Task. /// Параметр tasktext содержит формулировку задания; отдельные строки @@ -292,6 +327,7 @@ class procedure NewTask(tasktext: string); begin PT4MakerNetX.NewTask(tasktext); end; + /// Добавляет комментарий в новой строке раздела исходных даннных. class procedure DataComm(comm: string); begin @@ -447,18 +483,34 @@ begin result := PT4MakerNetX.CurrentTest; end; -/// Генерирует случайное целов в диапазоне от M до N включительно. +/// Генерирует случайное целое число в диапазоне от M до N включительно. /// Если M >= N, то возвращает M. class function Random(M, N: integer): integer; begin result := PT4MakerNetX.Random(M, N); end; -/// Генерирует случайное вещественное на промежутке [A, B). +/// Генерирует случайное вещественное число на промежутке [A, B). /// Если промежуток [A, B) пуст, то возвращает A. class function Random(A, B: real): real; begin result := PT4MakerNetX.Random(A, B); end; +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с одним дробным знаком и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до одного дробного знака и снабженное добавкой порядка 1e-7. +class function Random1(A, B: real): real; +begin + result := PT4MakerNetX.Random1(A, B); +end; +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с двумя дробными знаками и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до двух дробных знаков и снабженное добавкой порядка 1e-7. +class function Random2(A, B: real): real; +begin + result := PT4MakerNetX.Random2(A, B); +end; /// Генерирует случайную строку длины len, состоящую /// из цифр и строчных (т.е. маленьких) латинских букв. class function RandomName(len: integer): string; @@ -468,7 +520,8 @@ end; /// Создает новую группу с кратким описанием GroupDescription, /// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. -/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4). +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4 +/// и возможных суффиксов _ru или _en). /// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. /// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую /// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). @@ -476,6 +529,17 @@ class procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer begin PT4MakerNetX.NewGroup(GroupDescription, GroupAuthor, Options); end; +/// Создает новую группу с кратким описанием GroupDescription, английским описанием GroupEnDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +class procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer := 0); +begin + PT4MakerNetX.NewGroup(GroupDescription, GroupEnDescription, GroupAuthor, Options); +end; /// Обеспечивает регистрацию созданной группы в электронном задачнике. /// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string), /// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные). @@ -490,6 +554,13 @@ class procedure UseTask(GroupName: string; TaskNumber: integer); begin PT4MakerNetX.UseTask(GroupName, TaskNumber); end; +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +class procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + PT4MakerNetX.UseTask(GroupName, TaskNumber, TopicDescription); +end; /// Возвращает массив из 116 русских слов. class function GetWords: array of string; begin @@ -511,13 +582,15 @@ begin result := PT4MakerNetX.GetEnSentences; end; /// Возвращает массив из 85 русских многострочных текстов. -/// Каждая строка текста оканчивается символами #13#10. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. class function GetTexts: array of string; begin result := PT4MakerNetX.GetTexts; end; /// Возвращает массив из 85 английских многострочных текстов. -/// Каждая строка текста оканчивается символами #13#10. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. class function GetEnTexts: array of string; begin result := PT4MakerNetX.GetEnTexts; @@ -548,14 +621,16 @@ begin end; /// Возвращает случайный русский многострочный текст из массива, /// входящего в конструктор учебных заданий. -/// Каждая строка текста оканчивается символами #13#10. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. class function RandomText: string; begin result := PT4MakerNetX.RandomText; end; /// Возвращает случайный английский многострочный текст из массива, /// входящего в конструктор учебных заданий. -/// Каждая строка текста оканчивается символами #13#10. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. class function RandomEnText: string; begin result := PT4MakerNetX.RandomEnText; @@ -659,7 +734,7 @@ var yd, yr, ye, nd, nr, pr, wd: integer; nt, ut, fd, fr: boolean; fmt: string; - tasks := new List(200); + tasks := new List(100); procedure Show(s: string); begin @@ -1180,13 +1255,14 @@ begin ResultS('\B'+Copy(ErrorMessage(ErrMes7),1,76)+'\b', '', 1, 1); end; -function GetGroupName(assname: string): string; +function GetGroupName(assname: string; var libname: string): string; begin - result := copy(assname, 1, pos(',', assname)-1); - var p := pos('_', result); + libname := copy(assname, 1, pos(',', assname)-1); + result := libname; + var p := pos('_', libname); if p > 0 then - delete(result, p, 100); - delete(result, 1, 3); + delete(result, p, 100); // удаление суффикса, определяющего язык интерфейса + delete(result, 1, 3); // удаление префикса PT4 end; function AcceptedLanguage(opt: integer): boolean; @@ -1198,23 +1274,26 @@ begin or (lang and lgPascal = lgPascal) and (opt and OptionPascalLanguages = OptionPascalLanguages); end; - procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer); - begin - if not AcceptedLanguage(Options) then exit; // недопустимый текущий язык + NewGroup(GroupDescription, '', GroupAuthor, Options); +end; + +procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer); +begin + if not AcceptedLanguage(Options) then + exit; // недопустимый текущий язык var ass := Assembly.GetCallingAssembly; - var GroupName := GetGroupName(ass.FullName); - var nm := 'PT4' + GroupName; + var LibName := ''; + var GroupName := GetGroupName(ass.FullName, LibName); tasks.Clear; var GroupKey := 'GK'; - foreach var e in ass.GetType(nm + '.' + nm).GetMethods do + foreach var e in ass.GetType(LibName + '.' + LibName).GetMethods.OrderBy(e -> e.Name.ToUpper) do //2018.08 if e.Name.ToUpper.StartsWith('TASK') then begin tasks.Add(e); GroupKey := GroupKey + Copy(e.Name, 5, 100); end; - tasks := tasks.OrderBy(e -> e.Name).ToList; // Сортировка задач! if tasks.Count = 0 then begin Show('Группа ' + GroupName + ' не содержит заданий'#13#10+ @@ -1225,11 +1304,14 @@ begin begin Show('Группа ' + GroupName + ' содержит более 999 заданий.'); exit; - end; + end; + GroupKey := Copy(GroupKey, 1, 30); if Options and OptionUseAddition = OptionUseAddition then GroupKey := GroupKey + '#UseAddition#'; if Options and OptionHideExamples = OptionHideExamples then GroupKey := GroupKey + '#HideExamples#'; + if GroupEnDescription.Trim <> '' then + GroupKey := GroupKey + '#EnTopic<' + GroupEnDescription.Trim + '>#'; CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey, tasks.Count, RunTask); end; @@ -1257,6 +1339,18 @@ begin result := PT4TaskMakerNET.RandomR(A, B); end; +function Random1(A, B: real): real; +begin + result := Random(Round(a*10), Round(b*10)) / 10 + + Random * 1.0e-7; +end; + +function Random2(A, B: real): real; +begin + result := Random(Round(a*100), Round(b*100)) / 100 + + Random * 1.0e-7; +end; + function CurrentTest: integer; begin if CheckTT then exit; @@ -1270,6 +1364,13 @@ begin ut := true; end; +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + if ut then exit; + PT4TaskMakerNET.UseTask(GroupName, TaskNumber, TopicDescription); + ut := true; +end; + function GetWords: array of string; begin Result := ArrGen(WordCount, i -> WordSample(i)); diff --git a/bin/Lib/PT4TaskMakerNET.pas b/bin/Lib/PT4TaskMakerNET.pas index d8ac3a42d..d270879c4 100644 --- a/bin/Lib/PT4TaskMakerNET.pas +++ b/bin/Lib/PT4TaskMakerNET.pas @@ -1,13 +1,14 @@ -/// Конструктор для электронного задачника Programming Taskbook 4.14 +/// Конструктор для электронного задачника Programming Taskbook 4.23 + unit PT4TaskMakerNET; //------------------------------------------------------------------------------ -// Конструктор для электронного задачника Programming Taskbook 4.14 +// Конструктор для электронного задачника Programming Taskbook 4.23 //------------------------------------------------------------------------------ // Модуль для создания NET-библиотек с группами заданий в системе PascalABC.NET // -// Copyright (c) 2013-2015 М.Э.Абрамян -// Электронный задачник Programming Taskbook Copyright (c) М.Э.Абрамян,1998-2015 +// Copyright (c) 2013-2023 М.Э.Абрамян +// Электронный задачник Programming Taskbook Copyright (c) М.Э.Абрамян,1998-2023 //------------------------------------------------------------------------------ @@ -38,9 +39,12 @@ const lgJava = $0010000; // добавлено в версии 4.11 lgRuby = $0020000; // добавлено в версии 4.12 lgWithPointers = $000003D; - lgWithObjects = $00FFF80; // добавлено в версии 4.11 + lgWithObjects = $0FFFF80; // изменено в версии 4.22 lgNET = $000FF00; lgAll = $0FFFFFF; // изменено в версии 4.10 + lgFS = $0000800; // добавлено в версии 4.19 + lgJulia = $0040000; // добавлено в версии 4.22 + lgC = $0000008; // добавлено в версии 4.23 type @@ -67,9 +71,13 @@ procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string /// Добавляет к создаваемой группе задание из другой группы procedure UseTask(GroupName: string; TaskNumber: integer); +/// Добавляет к создаваемой группе задание из другой группы +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); // добавлено в версии 4.19 + /// Должна указываться первой при определении нового задания procedure CreateTask(SubgroupName: string); overload; + /// Должна указываться первой при определении нового задания procedure CreateTask; overload; @@ -253,12 +261,12 @@ procedure SetTestCount(N: integer); /// надо указывать B пробелов (элементы нумеруются от 1) function Center(I, N, W, B: integer): integer; -/// Возвращает псевдослучайное целое число, лежащее +/// Возвращает случайное целое число, лежащее /// в диапазоне от M до N включительно. Если указанный /// диапазон пуст, то возвращает M. function RandomN(M, N: integer): integer; // добавлено в версии 4.11 -/// Возвращает псевдослучайное вещественное число, лежащее +/// Возвращает случайное вещественное число, лежащее /// на полуинтервале [A, B). Если указанный полуинтервал /// пуст, то возвращает A. function RandomR(A, B: real): real; // добавлено в версии 4.11 @@ -421,7 +429,7 @@ procedure SetProcess(ProcessRank: integer); implementation -uses System.Runtime.InteropServices; +uses System.Runtime.InteropServices, System.Text; function LoadLibrary(FileName: string): integer; external 'kernel32.dll' Name 'LoadLibrary'; @@ -444,25 +452,26 @@ type TSFunc = function : string; TSFuncN = function (N: integer): string; TProc = procedure; - TProcS = procedure (S: string); - TProcSCN2 = procedure (S: string; C: Char; N1, N2: integer); - TProcSN = procedure (S: string; N: integer); - TProcSN2 = procedure (S: string; N1, N2: integer); - TProcSN3 = procedure (S: string; N1, N2, N3: integer); - TProcSN4 = procedure (S: string; N1, N2, N3, N4: integer); - TProcSN5 = procedure (S: string; N1, N2, N3, N4, N5: integer); - TProcSN6 = procedure (S: string; N1, N2, N3, N4, N5, N6: integer); - TProcSRN3 = procedure (S: string; R: real; N1, N2, N3: integer); - TProcSR2N3 = procedure (S: string; R1, R2: real; N1, N2, N3: integer); - TProcSR3N3 = procedure (S: string; R1, R2, R3: real; N1, N2, N3: integer); - TProcS2 = procedure (S1, S2: string); - TProcS2N2 = procedure (S1, S2: string; N1, N2: integer); - TProcS4NP = procedure (S1, S2, S3, S4: string; N: integer; P: TInitTaskProc); + TProcS = procedure (S: array of byte); + TProcSCN2 = procedure (S: array of byte; C: Char; N1, N2: integer); + TProcSN = procedure (S: array of byte; N: integer); + TProcSN2 = procedure (S: array of byte; N1, N2: integer); + TProcSN3 = procedure (S: array of byte; N1, N2, N3: integer); + TProcSN4 = procedure (S: array of byte; N1, N2, N3, N4: integer); + TProcSN5 = procedure (S: array of byte; N1, N2, N3, N4, N5: integer); + TProcSN6 = procedure (S: array of byte; N1, N2, N3, N4, N5, N6: integer); + TProcSRN3 = procedure (S: array of byte; R: real; N1, N2, N3: integer); + TProcSR2N3 = procedure (S: array of byte; R1, R2: real; N1, N2, N3: integer); + TProcSR3N3 = procedure (S: array of byte; R1, R2, R3: real; N1, N2, N3: integer); + TProcS2 = procedure (S1, S2: array of byte); + TProcS2N2 = procedure (S1, S2: array of byte; N1, N2: integer); + TProcS4NP = procedure (S1, S2, S3, S4: array of byte; N: integer; P: TInitTaskProc); TProcN = procedure (N: integer); TProcNP = procedure (N: integer; P: pointer); TProcN3 = procedure (N1, N2, N3: integer); TProcN4 = procedure (N1, N2, N3, N4: integer); - TProcSvN = procedure (S: string; var N: integer); + TProcSvN = procedure (S: array of byte; var N: integer); + TProcSNS = procedure (S1: array of byte; N: integer; S2: array of byte); var creategroup_: TProcS4NP; @@ -502,9 +511,17 @@ var setprocess_: TProcN; currentversion_: TSFunc; // добавлено в версии 4.10 currenttest_: TNFunc; // добавлено в версии 4.11 + usetaskex_: TProcSNS; // добавлено в версии 4.19 FHandle: integer; +function ToBytes(s: string): array of byte; +begin + var utf8 := Encoding.Unicode; + var ansi := Encoding.GetEncoding(1251); + result := Encoding.Convert(utf8, ansi, utf8.GetBytes(S)); +end; + procedure ActivateNET(S: string); begin FHandle := LoadLibrary(S); @@ -581,6 +598,8 @@ begin setprocess_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setprocess'), typeof(TProcN))); currentversion_ := TSFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentversion'), typeof(TSFunc))); // добавлено в версии 4.10 currenttest_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'curt'), typeof(TNFunc))); // добавлено в версии 4.11 + usetaskex_ := TProcSNS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'usetaskex'), typeof(TProcSNS))); // добавлено в версии 4.19 + end; //============================================================================= @@ -591,18 +610,26 @@ procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string TaskCount: integer; InitTaskProc: TInitTaskProc); begin p := InitTaskProc; - creategroup_(GroupName, GroupDescription, GroupAuthor, - GroupKey, TaskCount, p); + creategroup_(ToBytes(GroupName), ToBytes(GroupDescription), ToBytes(GroupAuthor), + ToBytes(GroupKey), TaskCount, p); end; procedure UseTask(GroupName: string; TaskNumber: integer); begin - usetask_(GroupName, TaskNumber); + usetask_(ToBytes(GroupName), TaskNumber); +end; + +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + if usetaskex_ <> nil then + usetaskex_(ToBytes(GroupName), TaskNumber, ToBytes(TopicDescription)) + else + usetask_(ToBytes(GroupName), TaskNumber); end; procedure CreateTask(SubgroupName: string); begin - createtask_(SubgroupName); + createtask_(ToBytes(SubgroupName)); end; procedure CreateTask; @@ -610,6 +637,15 @@ begin CreateTask(''); end; + + + + + + + + + function CurrentLanguage: integer; begin result := currentlanguage_; @@ -622,7 +658,7 @@ end; procedure TaskText(S: string; X, Y: integer); begin - tasktext_(S, X, Y); + tasktext_(ToBytes(S), X, Y); end; procedure TaskText(S: string); @@ -666,18 +702,18 @@ begin end; case n of 0: ; - 1: tasktext_(Copy(S, p1[1], p2[1]), 0, 3); + 1: tasktext(Copy(S, p1[1], p2[1]), 0, 3); 2: for i := 1 to n do - tasktext_(Copy(S, p1[i], p2[i]), 0, 2*i); + tasktext(Copy(S, p1[i], p2[i]), 0, 2*i); 3, 4: for i := 1 to n do - tasktext_(Copy(S, p1[i], p2[i]), 0, i+1); + tasktext(Copy(S, p1[i], p2[i]), 0, i+1); else begin for i := 1 to 5 do - tasktext_(Copy(S, p1[i], p2[i]), 0, i); + tasktext(Copy(S, p1[i], p2[i]), 0, i); for i := 6 to n do - tasktext_(Copy(S, p1[i], p2[i]), 0, 0); + tasktext(Copy(S, p1[i], p2[i]), 0, 0); end; end; end; @@ -692,212 +728,212 @@ end; procedure DataB (Cmt: string; B: boolean; X, Y: integer); begin - datab_(Cmt, BtoN(B), X, Y); + datab_(ToBytes(Cmt), BtoN(B), X, Y); end; procedure DataB (B: boolean; X, Y: integer); begin - datab_('', BtoN(B), X, Y); + datab_(ToBytes(''), BtoN(B), X, Y); end; procedure DataN (Cmt: string; N: integer; X, Y, W: integer); begin - datan_(Cmt, N, X, Y, W); + datan_(ToBytes(Cmt), N, X, Y, W); end; procedure DataN (N: integer; X, Y, W: integer); begin - datan_('', N, X, Y, W); + datan_(ToBytes(''), N, X, Y, W); end; procedure DataN2(Cmt: string; N1, N2: integer; X, Y, W: integer); begin - datan2_(Cmt, N1, N2, X, Y, W); + datan2_(ToBytes(Cmt), N1, N2, X, Y, W); end; procedure DataN2(N1, N2: integer; X, Y, W: integer); begin - datan2_('', N1, N2, X, Y, W); + datan2_(ToBytes(''), N1, N2, X, Y, W); end; procedure DataN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); begin - datan3_(Cmt, N1, N2, N3, X, Y, W); + datan3_(ToBytes(Cmt), N1, N2, N3, X, Y, W); end; procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); begin - datan3_('', N1, N2, N3, X, Y, W); + datan3_(ToBytes(''), N1, N2, N3, X, Y, W); end; procedure DataR(Cmt: string; R: real; X, Y, W: integer); begin - datar_(Cmt, R, X, Y, W); + datar_(ToBytes(Cmt), R, X, Y, W); end; procedure DataR(R: real; X, Y, W: integer); begin - datar_('', R, X, Y, W); + datar_(ToBytes(''), R, X, Y, W); end; procedure DataR2(Cmt: string; R1, R2: real; X, Y, W: integer); begin - datar2_(Cmt, R1, R2, X, Y, W); + datar2_(ToBytes(Cmt), R1, R2, X, Y, W); end; procedure DataR2(R1, R2: real; X, Y, W: integer); begin - datar2_('', R1, R2, X, Y, W); + datar2_(ToBytes(''), R1, R2, X, Y, W); end; procedure DataR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); begin - datar3_(Cmt, R1, R2, R3, X, Y, W); + datar3_(ToBytes(Cmt), R1, R2, R3, X, Y, W); end; procedure DataR3(R1, R2, R3: real; X, Y, W: integer); begin - datar3_('', R1, R2, R3, X, Y, W); + datar3_(ToBytes(''), R1, R2, R3, X, Y, W); end; procedure DataC(Cmt: string; C: char; X, Y: integer); begin - datac_(Cmt, C, X, Y); + datac_(ToBytes(Cmt), C, X, Y); end; procedure DataC(C: char; X, Y: integer); begin - datac_('', C, X, Y); + datac_(ToBytes(''), C, X, Y); end; procedure DataS(Cmt: string; S: string; X, Y: integer); begin - datas_(Cmt, S, X, Y); + datas_(ToBytes(Cmt), ToBytes(S), X, Y); end; procedure DataS(S: string; X, Y: integer); begin - datas_('', S, X, Y); + datas_(ToBytes(''), ToBytes(S), X, Y); end; procedure DataP(Cmt: string; NP: integer; X, Y: integer); begin - datap_ (Cmt, NP, X, Y); + datap_ (ToBytes(Cmt), NP, X, Y); end; procedure DataP(NP: integer; X, Y: integer); begin - datap_ ('', NP, X, Y); + datap_ (ToBytes(''), NP, X, Y); end; procedure DataComment(Cmt: string; X, Y: integer); begin - datacomment_(Cmt, X, Y); + datacomment_(ToBytes(Cmt), X, Y); end; procedure ResultB(Cmt: string; B: boolean; X, Y: integer); begin - resultb_(Cmt, BtoN(B), X, Y); + resultb_(ToBytes(Cmt), BtoN(B), X, Y); end; procedure ResultB(B: boolean; X, Y: integer); begin - resultb_('', BtoN(B), X, Y); + resultb_(ToBytes(''), BtoN(B), X, Y); end; procedure ResultN(Cmt: string; N: integer; X, Y, W: integer); begin - resultn_(Cmt, N, X, Y, W); + resultn_(ToBytes(Cmt), N, X, Y, W); end; procedure ResultN(N: integer; X, Y, W: integer); begin - resultn_('', N, X, Y, W); + resultn_(ToBytes(''), N, X, Y, W); end; procedure ResultN2(Cmt: string; N1, N2: integer; X, Y, W: integer); begin - resultn2_(Cmt, N1, N2, X, Y, W); + resultn2_(ToBytes(Cmt), N1, N2, X, Y, W); end; procedure ResultN2(N1, N2: integer; X, Y, W: integer); begin - resultn2_('', N1, N2, X, Y, W); + resultn2_(ToBytes(''), N1, N2, X, Y, W); end; procedure ResultN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); begin - resultn3_(Cmt, N1, N2, N3, X, Y, W); + resultn3_(ToBytes(Cmt), N1, N2, N3, X, Y, W); end; procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); begin - resultn3_('', N1, N2, N3, X, Y, W); + resultn3_(ToBytes(''), N1, N2, N3, X, Y, W); end; procedure ResultR(Cmt: string; R: real; X, Y, W: integer); begin - resultr_(Cmt, R, X, Y, W); + resultr_(ToBytes(Cmt), R, X, Y, W); end; procedure ResultR(R: real; X, Y, W: integer); begin - resultr_('', R, X, Y, W); + resultr_(ToBytes(''), R, X, Y, W); end; procedure ResultR2(Cmt: string; R1, R2: real; X, Y, W: integer); begin - resultr2_(Cmt, R1, R2, X, Y, W); + resultr2_(ToBytes(Cmt), R1, R2, X, Y, W); end; procedure ResultR2(R1, R2: real; X, Y, W: integer); begin - resultr2_('', R1, R2, X, Y, W); + resultr2_(ToBytes(''), R1, R2, X, Y, W); end; procedure ResultR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); begin - resultr3_(Cmt, R1, R2, R3, X, Y, W); + resultr3_(ToBytes(Cmt), R1, R2, R3, X, Y, W); end; procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); begin - resultr3_('', R1, R2, R3, X, Y, W); + resultr3_(ToBytes(''), R1, R2, R3, X, Y, W); end; procedure ResultC(Cmt: string; C: char; X, Y: integer); begin - resultc_(Cmt, C, X, Y); + resultc_(ToBytes(Cmt), C, X, Y); end; procedure ResultC(C: char; X, Y: integer); begin - resultc_('', C, X, Y); + resultc_(ToBytes(''), C, X, Y); end; procedure ResultS(Cmt: string; S: string; X, Y: integer); begin - results_(Cmt, S, X, Y); + results_(ToBytes(Cmt), ToBytes(S), X, Y); end; procedure ResultS(S: string; X, Y: integer); begin - results_('', S, X, Y); + results_(ToBytes(''), ToBytes(S), X, Y); end; procedure ResultP(Cmt: string; NP: integer; X, Y: integer); begin - resultp_(Cmt, NP, X, Y); + resultp_(ToBytes(Cmt), NP, X, Y); end; procedure ResultP(NP: integer; X, Y: integer); begin - resultp_('', NP, X, Y); + resultp_(ToBytes(''), NP, X, Y); end; procedure ResultComment(Cmt: string; X, Y: integer); begin - resultcomment_(Cmt, X, Y); + resultcomment_(ToBytes(Cmt), X, Y); end; procedure SetPrecision(N: integer); @@ -922,52 +958,52 @@ end; procedure DataFileN(FileName: string; Y, W: integer); begin - datafilen_(FileName, Y, W); + datafilen_(ToBytes(FileName), Y, W); end; procedure DataFileR(FileName: string; Y, W: integer); begin - datafiler_(FileName, Y, W); + datafiler_(ToBytes(FileName), Y, W); end; procedure DataFileC(FileName: string; Y, W: integer); begin - datafilec_(FileName, Y, W); + datafilec_(ToBytes(FileName), Y, W); end; procedure DataFileS(FileName: string; Y, W: integer); begin - datafiles_(FileName, Y, W); + datafiles_(ToBytes(FileName), Y, W); end; procedure DataFileT(FileName: string; Y1, Y2: integer); begin - datafilet_(FileName, Y1, Y2); + datafilet_(ToBytes(FileName), Y1, Y2); end; procedure ResultFileN(FileName: string; Y, W: integer); begin - resultfilen_(FileName, Y, W); + resultfilen_(ToBytes(FileName), Y, W); end; procedure ResultFileR(FileName: string; Y, W: integer); begin - resultfiler_(FileName, Y, W); + resultfiler_(ToBytes(FileName), Y, W); end; procedure ResultFileC(FileName: string; Y, W: integer); begin - resultfilec_(FileName, Y, W); + resultfilec_(ToBytes(FileName), Y, W); end; procedure ResultFileS(FileName: string; Y, W: integer); begin - resultfiles_(FileName, Y, W); + resultfiles_(ToBytes(FileName), Y, W); end; procedure ResultFileT(FileName: string; Y1, Y2: integer); begin - resultfilet_(FileName, Y1, Y2); + resultfilet_(ToBytes(FileName), Y1, Y2); end; procedure SetPointer(NP: integer; P: PNode); @@ -1082,12 +1118,12 @@ end; procedure CommentText(S: string); begin - commenttext_(S); + commenttext_(ToBytes(S)); end; procedure UseComment(GroupName, SubgroupName: string); begin - usecomment_(GroupName, SubgroupName); + usecomment_(ToBytes(GroupName), ToBytes(SubgroupName)); end; procedure UseComment(GroupName: string); @@ -1097,7 +1133,7 @@ end; procedure Subgroup(SubgroupName: string); begin - subgroup_(SubgroupName); + subgroup_(ToBytes(SubgroupName)); end; procedure SetObjectStyle; @@ -1123,7 +1159,7 @@ end; procedure CreateTask(SubgroupName: string; var ProcessCount: integer); begin if createtask2_ <> nil then - createtask2_(SubgroupName, ProcessCount) + createtask2_(ToBytes(SubgroupName), ProcessCount) else ShowError('The CreateTask procedure with ProcessCount parameter', '4.9'); end; @@ -1167,10 +1203,6 @@ begin result := Random * (B-A) + A; end; - - - - initialization finalization diff --git a/bin/Lib/TasksArr.pas b/bin/Lib/TasksArr.pas new file mode 100644 index 000000000..013852e3f --- /dev/null +++ b/bin/Lib/TasksArr.pas @@ -0,0 +1,746 @@ +unit TasksArr; + +uses LightPT; + +var AllTaskNames := Arr('Arr1','Arr2','Arr3','Arr4','Arr5','Arr6', + 'Arr_Sum0','Arr_Sum1','Arr_Sum2','Arr_Sum3','Arr_Sum4','Arr_CountA1','Arr_CountA2', + 'Arr_Replace1','Arr_Replace2','Arr_Find1','Arr_Find2','Arr_Find3','Arr_Find4', + 'Arr_Index1','Arr_Index2','Arr_Index2a','Arr_Index3','Arr_Index4', + 'Arr_MinMax1','Arr_MinMax2','Arr_MinMax3','Arr_MinMax4','Arr_Neighbors1','Arr_MinMaxInd1','Arr_MinMaxInd2', + 'Arr_Fill1','Arr_Fill2','Заполнение1','ЗаполнениеЛямбда1','Заполнение2','ЗаполнениеЛямбда2', + 'ЗаполнениеПоПред1','ЗаполнениеПоПред2','ЗаполнениеГеом1','ЗаполнениеГеом2','ЗаполнениеСумма1','ЗаполнениеСумма2', + 'Arr_Transf1','Arr_Transf1a','Arr_Transf2','Arr_Transf3','Arr_Transf4','Arr_Transf5','Arr_Transf7', + 'Arr_Transf8','Arr_Transf9','Arr_Transf6', + 'Arr_Reverse1','Arr_Reverse2','Arr_Reverse3','Arr_Reverse3a', + 'Arr_Count1','Arr_Count2','Arr_Count3','Arr_Count4', + 'Arr_FindIndex1','Arr_FindIndex2', + 'Arr_Filter1','Arr_GenFilter1','Arr_GenFilter2', + 'Arr_Op1', + 'Arr_Slice1','Arr_Slice2','Arr_Slice3','Arr_Slice7','Arr_Slice10','Arr_Slice11','Arr_Slice12', + 'Arr_InsDel1','Arr_InsDel2','Arr_InsDel3', + 'Arr_Shift1','Arr_Shift2', + 'List1','List2','List3','List4','List5','List6','List6a','List6b','List7','List8','List9','List9a','List9b', + 'Sort1','Sort2','Sort3', + 'BubbleSort','BubbleSort2'); + +procedure CheckTaskT(name: string); +begin + FlattenOutput; // Во всех задачах на массивы + ClearOutputListFromSpaces; // Это чтобы a.Print работал. По идее, надо писать всегда. Яне знаю задач, где пробелы в ответе + + case name of + 'Arr1','Arr2': begin + FilterOnlyNumbersAndBools; + CheckData(InitialOutput := |cInt|*5); + CheckOutputSeq(|cInt|*10); + // Надо проверить, что Output[9] - целое ненулевое + if OutputList.Count<10 then // чтобы не получить исключение + exit; + if OutIsInt(9) then + if OutInt(9) = 0 then + begin + ColoredMessage('Массив надо заполнить ненулевыми значениями'); + TaskResult := BadSolution; + end; + end; + 'Arr3','Arr4': begin + FilterOnlyNumbersAndBools; + TaskResult := PartialSolution; // То есть, уже начали проверять, уже под контролем + CheckData(|cInt|*5, |cInt|*5, |cInt|*10); + if TaskResult <> PartialSolution then + exit; + + CheckOutputSeq(InputList); + end; + 'Arr5','Arr6': begin + // Проверка того что введено и выведено 10 значений, что ввод совпадает с выводом и что вывод в диапазоне от 2 до 5 + // Что плохо - все Check неявно меняют TaskResult, а здесь надо еще и явно + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + + TaskResult := PartialSolution; // потому что если просто запустить - будет InitialSolution + + CheckOutputSeq(InputList); + // Дополнительная проверка + if TaskResult = Solved then + begin + // проверим на диапазон от 2 до 5 + var a := IntArr(n); + if a.Any(x->x not in 2..5) then + begin + TaskResult := BadSolution; + ColoredMessage('Результирующие данные должны быть от 2 до 5',MsgColorGray); + exit; + end; + end; + end; + 'Arr_Sum0': begin + // Это паттерн: вводится n, а потом вводится n элементов массива + FilterOnlyNumbersAndBools; + var n := Int; + CheckInput(|cInt| + n*|cInt|); + var a := IntArr(n); + CheckOutput(a.Sum) + end; + 'Arr_Sum1','Arr_Sum2': begin + FilterOnlyNumbersAndBools; + // Это всё надо. Начальный ввод - 10 целых, весь ввод - тоже + var n := 10; + CheckData(|cInt|*n, |cInt|*(n+1), |cInt|*n); + + var a := IntArr(n); + var p := integer(a.Product); + CheckOutputAfterInitial(p) + end; + 'Arr_Sum3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*(n+1), |cInt|*n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.Product) + end; + 'Arr_Sum4': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + + var a := IntArr(n); + var ave := a.Average; + CheckOutputAfterInitialSeq(|ave|*2) + end; + 'Arr_CountA1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + var a := IntArr(n); + CheckOutputAfterInitial(a.CountOf(3)); + end; + 'Arr_CountA2': begin + ClearOutputListFromSpaces; // Кроме чисел тут строки + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var lst := ObjectList.New; + var a := IntArr(n); + var cnt4 := a.CountOf(4); + var cnt5 := a.CountOf(5); + + case cnt4.CompareTo(cnt5) of + 1: lst.Add('четвёрок больше'); + 0: lst.Add('одинаково'); + -1: lst.Add('пятёрок больше'); + end; + CheckOutputAfterInitialSeq(lst); + end; + 'Arr_Replace1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var arr := IntArr(n); + arr.Replace(2,3); + CheckOutputAfterInitialSeq(arr); + end; + 'Arr_Replace2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var arr := IntArr(n); + arr.Replace(2,22); + arr.Replace(5,55); + arr.Replace(22,5); + arr.Replace(55,2); + CheckOutputAfterInitialSeq(arr); + end; + 'Arr_Find1': begin + FilterOnlyNumbersAndBools; + var n := 5; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + var has2 := 2 in a; + CheckOutputAfterInitial(has2); + end; + 'Arr_Find2': begin + FilterOnlyNumbersAndBools; + var n := 5; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,1); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var haseven := a.FindIndex(x -> x.IsEven) <> -1; + CheckOutputAfterInitial(haseven); + end; + 'Arr_Find3': begin + FilterOnlyNumbersAndBools; + var n := 5; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,1,99); + if tnum = 2 then + a := ArrRandomInteger(n,1,30) + else if tnum = 3 then + a := ArrRandomInteger(n,51,99); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var haseven := a.ToArray.FindIndex(x -> x in 40..50) <> -1; + CheckOutputAfterInitial(haseven); + end; + + 'Arr_Find4': begin + FilterOnlyNumbersAndBools; + var n := 3; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,11); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var allodd := a.All(x -> x.IsOdd); + CheckOutputAfterInitial(allodd); + end; + 'Arr_Index1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,5); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var ind := a.FindIndex(x -> x = 2); + CheckOutputAfterInitial(ind); + end; + 'Arr_Index2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,4); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var ind := a.FindLastIndex(x -> x = 5); + CheckOutputAfterInitial(ind); + end; + 'Arr_Index2a': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + var a := IntArr(n); + var ind2 := a.IndexOf(2); + var ind5 := a.IndexOf(5); + CheckOutputAfterInitialSeq(|ind2,ind5|); + end; + 'Arr_Index3': begin + FilterOnlyNumbersAndBools; + var n := 20; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var arr := IntArr(n); + var ind2 := arr.IndexOf(2); + var ind5 := arr.IndexOf(5); + Swap(arr[ind2],arr[ind5]); + CheckOutputAfterInitialSeq(arr); + end; + 'Arr_Index4': begin + FilterOnlyNumbersAndBools; + var n := 30; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + var arr := IntArr(n); + var ind := arr.IndexOf(2); + ind := arr.IndexOf(2,ind + 1); + CheckOutputAfterInitial(ind); + end; + + 'Arr_MinMax1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + var min := a.Min; + CheckOutputAfterInitial(min); + end; + 'Arr_MinMax2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + var max := a.Max; + CheckOutputAfterInitial(max); + end; + 'Arr_MinMax3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.Min); + end; + 'Arr_MinMax4': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(|a.Min,a.Max|); + end; + + 'Arr_Neighbors1': begin + FilterOnlyNumbersAndBools; + var n := 20; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt*n); + + var a := IntArr(n); + var cnt := 0; + for var i := 0 to n-2 do + if (a[i] = 2) and (a[i+1] = 5) then + cnt += 1; + CheckOutputAfterInitial(cnt); + end; + 'Arr_MinMaxInd1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + CheckOutputAfterInitial(a.IndexMax,a.IndexMax); + end; + 'Arr_MinMaxInd2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + var indmax := a.IndexMax; + var indmin := a.IndexMin; + Swap(a[indmax],a[indmin]); + CheckOutputSeq(a); + end; + + 'Arr_Fill1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := nil); + + CheckOutputSeq(ArrFill(10,1)); + end; + 'Arr_Fill2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := nil); + + CheckOutputSeq(ArrFill(10,1)); + end; + 'Заполнение1','ЗаполнениеЛямбда1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,i->i*i)); + end; + 'Заполнение2','ЗаполнениеЛямбда2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,1,i->i+2)); + end; + 'ЗаполнениеПоПред1','ЗаполнениеПоПред2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,5,i->i+5)); + end; + 'ЗаполнениеГеом1','ЗаполнениеГеом2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,1,i->i*2)); + end; + 'ЗаполнениеСумма1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(ArrGen(10,5,i->i+5).Sum); + end; + 'ЗаполнениеСумма2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(ArrGen(10,1,i->i*2).Sum); + end; + + // 'Arr_Transf1' 'Arr_Transf1a' 'Arr_Transf2' 'Arr_Transf3' 'Arr_Transf4' 'Arr_Transf5' 'Arr_Transf7' 'Arr_Transf8' 'Arr_Transf9'- задачник + 'Arr_Transf6': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + foreach var i in a.Indices do + if i.IsOdd then + a[i] := 0; + CheckOutputAfterInitialSeq(a); + end; + + 'Arr_Reverse1','Arr_Reverse2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Reverse); + end; + 'Arr_Reverse3': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + for var i:= 0 to n div 2 - 1 do + Swap(a[i],a[i + n div 2]); + CheckOutputAfterInitialSeq(a); + end; + + 'Arr_Reverse3a': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + + var out := IntArr(n); + var out0 := Copy(out); + Reverse(out, 0, 5); + Reverse(out, 5, 5); + CheckOutputSeq(out0 + out); + end; + + 'Arr_Count1','Arr_Count2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.Count(x -> x.IsEven)); + end; + 'Arr_Count3': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.CountOf(3),a.CountOf(4),a.CountOf(5)); + end; + 'Arr_Count4': begin + var n := 30; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(|a.CountOf(a.Min),a.CountOf(a.Max)|); + end; + + 'Arr_FindIndex1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(|a.FindIndex(x-> x.IsOdd),a.FindLastIndex(x-> x.IsOdd)|); + end; + 'Arr_FindIndex2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + var i1 := a.FindIndex(x -> x.IsEven); + var i2 := a.FindLastIndex(x -> x.IsOdd); + Swap(a[i1],a[i2]); + CheckOutputAfterInitialSeq(a); + end; + + 'Arr_Filter1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt(1,100) * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Where(x->x<50)); + end; + 'Arr_GenFilter1': begin + CheckData(Input := Empty); + var a := ArrGen(50,1,x->x+2); + CheckOutputSeq(a.Where(x->x mod 7 = 0)); + end; + 'Arr_GenFilter2': begin + var n := 40; + CheckData(InitialOutput := |cInt|*n); + var a := ArrGen(40,1,1,(x,y)->x+y); + CheckOutputAfterInitialSeq(a.Where(x->x mod 5 = 0)); + end; + + 'Arr_Op1': begin + CheckData(Empty); + var a := |1,2,3|*5; + var b := |0| * 6 + |1| * 6; + var c := |1,2,3|*3 + |4,5,6|*3; + var d := |1| * 5 + |2| * 5 + |1| * 5 + |2| * 5; + CheckOutputSeq(a+b+c+d); + end; + + 'Arr_Slice1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n); + var a := Arr(0..9); + CheckOutputSeq(a + a[2:6] + a[:4] + a[2:]); + end; + 'Arr_Slice2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n); + var a := Arr(0..9); + CheckOutputSeq(a + a[:2] + a[5:] + a[1:^1]); + end; + 'Arr_Slice3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n + |cInt| * 2); + var a := Arr(0..9); + CheckOutputSeq(a + |9| + |8| + |7| + a[^2:] + a[1:^1]) + end; + 'Arr_Slice7': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n); + var a := Arr(0..9); + CheckOutputSeq(a + a[5::-1] + a[9::-2]) + end; + 'Arr_Slice10': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + var a := |6,2,4,3,6,1,7,8,2,4|; + CheckOutput(a[:5].Sum); + end; + 'Arr_Slice11': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + var a := |6,2,4,3,6,1,7,8,2,4|; + CheckOutput(a[5:].Min); + end; + 'Arr_Slice12': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + var a := |6,2,4,3,6,1,7,8,2,4|; + CheckOutput(a[::2].Average); + end; + + 'Arr_InsDel1': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[:5] + a[6:]); + end; + 'Arr_InsDel2': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[:5] + |333| + a[5:]); + end; + 'Arr_InsDel3': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[:1] + |555| + a[1:^1] + |555| + a[^1:]); + end; + + 'Arr_Shift1': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[1:] + |0|); + end; + 'Arr_Shift2': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + |0| + a[:^1]); + end; + + 'List1': begin + ClearOutputListFromSpaces; + CheckData(InitialOutput := |cInt|); + CheckOutput('Иванов','Петров','Сидоров'); + end; + 'List2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(11,2,13,4,15); + end; + 'List3': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(1,3,5,7); + end; + 'List4': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq((1..7).Select(x->x*x)); + end; + 'List5': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Where(x->x.IsEven)); + end; + 'List6': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Where(x->x.IsEven)+a.Where(x->x.IsOdd)); + end; + 'List6a': begin + FilterOnlyNumbersAndBools; + CheckData(InitialInput := |cInt|*3); + GenerateAutoTests(10); + + var a := IntArr(3); + CheckOutputSeq(|1,3,5|+a); + end; + 'List6b': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(|1,3,5,2,4,6,9,8,7|); + end; + 'List7': begin + FilterOnlyNumbersAndBools; + var n := 20; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(5); + var a := IntArr(10); + var b := IntArr(10); + CheckOutputAfterInitialSeq(a.Interleave(b)); + end; + 'List8': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + var a := OutSliceIntArr(0,n-1); + var b := a.ToList; + b.Insert(2,555); + CheckOutputSeq(a+b); + end; + 'List9': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + var a := OutSliceIntArr(0,n-1); + var b := a.ToList; + if b.Count>0 then + b.RemoveAt(2); + CheckOutputSeq(a+b); + end; + 'List9a': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq((1..10)); + end; + 'List9b': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialInput := |cInt|*n); + var a := IntArr(n); + CheckOutputSeq(a); + end; + + 'Sort1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(5); + var a := IntArr(n); + CheckOutputSeq(a+a.Sorted); + end; + 'Sort2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(5); + var a := IntArr(n); + CheckOutputSeq(a+a.SortedDescending); + end; + 'Sort3': begin + FilterOnlyNumbersAndBools; + var n := 9; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + CheckOutputSeq(a + a.Sorted); + end; + 'BubbleSort': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + var b := Copy(a); + for var j:=n-1 downto 1 do + if b[j-1] > b[j] then + Swap(b[j-1], b[j]); + CheckOutputSeq(a + b); + end; + 'BubbleSort2': begin + FilterOnlyNumbersAndBools; + var n := 9; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + CheckOutputSeq(a+a.Sorted); + end; + end; +end; + +initialization + CheckTask := CheckTaskT; +finalization +end. \ No newline at end of file diff --git a/bin/Lib/log.txt b/bin/Lib/log.txt deleted file mode 100644 index 449988db2..000000000 --- a/bin/Lib/log.txt +++ /dev/null @@ -1,846 +0,0 @@ -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2741 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. -Имя параметра: index - в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) - в System.Collections.Generic.List`1.get_Item(Int32 index) - в CodeCompletion.CompiledScope.GetInstance(List`1 gen_args, Boolean exact) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 5661 - в CodeCompletion.ProcScope.GetInstance(List`1 gen_args) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 2416 - в CodeCompletion.DomSyntaxTreeVisitor.select_method(SymScope[] meths, TypeScope tleft, TypeScope tright, TypeScope obj, Boolean obj_instanced, List`1 arg_types, expression[] args) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3275 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3334 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2919 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3284 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(procedure_call _procedure_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 4036 - в PascalABCCompiler.SyntaxTree.procedure_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 22005 - в CodeCompletion.DomSyntaxTreeVisitor.visit(statement_list _statement_list) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 183 - в PascalABCCompiler.SyntaxTree.statement_list.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 752 - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2747 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. -Имя параметра: index - в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) - в System.Collections.Generic.List`1.get_Item(Int32 index) - в CodeCompletion.CompiledScope.GetInstance(List`1 gen_args, Boolean exact) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 5661 - в CodeCompletion.ProcScope.GetInstance(List`1 gen_args) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 2416 - в CodeCompletion.DomSyntaxTreeVisitor.select_method(SymScope[] meths, TypeScope tleft, TypeScope tright, TypeScope obj, Boolean obj_instanced, List`1 arg_types, expression[] args) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3275 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3334 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2919 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3284 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(assign _assign) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 220 - в PascalABCCompiler.SyntaxTree.assign.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 1098 - в CodeCompletion.DomSyntaxTreeVisitor.visit(statement_list _statement_list) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 183 - в PascalABCCompiler.SyntaxTree.statement_list.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 752 - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2747 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. -Имя параметра: index - в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) - в System.Collections.Generic.List`1.get_Item(Int32 index) - в CodeCompletion.CompiledScope.GetInstance(List`1 gen_args, Boolean exact) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 5661 - в CodeCompletion.ProcScope.GetInstance(List`1 gen_args) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 2416 - в CodeCompletion.DomSyntaxTreeVisitor.select_method(SymScope[] meths, TypeScope tleft, TypeScope tright, TypeScope obj, Boolean obj_instanced, List`1 arg_types, expression[] args) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3275 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3334 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2919 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3284 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(procedure_call _procedure_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 4036 - в PascalABCCompiler.SyntaxTree.procedure_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 22005 - в CodeCompletion.DomSyntaxTreeVisitor.visit(statement_list _statement_list) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 183 - в PascalABCCompiler.SyntaxTree.statement_list.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 752 - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2747 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. -Имя параметра: index - в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) - в System.Collections.Generic.List`1.get_Item(Int32 index) - в CodeCompletion.CompiledScope.GetInstance(List`1 gen_args, Boolean exact) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 5661 - в CodeCompletion.ProcScope.GetInstance(List`1 gen_args) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 2416 - в CodeCompletion.DomSyntaxTreeVisitor.select_method(SymScope[] meths, TypeScope tleft, TypeScope tright, TypeScope obj, Boolean obj_instanced, List`1 arg_types, expression[] args) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3275 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3334 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2919 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3284 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(procedure_call _procedure_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 4036 - в PascalABCCompiler.SyntaxTree.procedure_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 22005 - в CodeCompletion.DomSyntaxTreeVisitor.visit(statement_list _statement_list) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 183 - в PascalABCCompiler.SyntaxTree.statement_list.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 752 - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2747 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. -Имя параметра: index - в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) - в System.Collections.Generic.List`1.get_Item(Int32 index) - в CodeCompletion.CompiledScope.GetInstance(List`1 gen_args, Boolean exact) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 5661 - в CodeCompletion.ProcScope.GetInstance(List`1 gen_args) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 2416 - в CodeCompletion.DomSyntaxTreeVisitor.select_method(SymScope[] meths, TypeScope tleft, TypeScope tright, TypeScope obj, Boolean obj_instanced, List`1 arg_types, expression[] args) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3275 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3334 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2919 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3284 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(procedure_call _procedure_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 4036 - в PascalABCCompiler.SyntaxTree.procedure_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 22005 - в CodeCompletion.DomSyntaxTreeVisitor.visit(statement_list _statement_list) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 183 - в PascalABCCompiler.SyntaxTree.statement_list.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 752 - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2747 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. -Имя параметра: index - в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) - в System.Collections.Generic.List`1.get_Item(Int32 index) - в CodeCompletion.CompiledScope.GetInstance(List`1 gen_args, Boolean exact) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 5661 - в CodeCompletion.ProcScope.GetInstance(List`1 gen_args) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 2416 - в CodeCompletion.DomSyntaxTreeVisitor.select_method(SymScope[] meths, TypeScope tleft, TypeScope tright, TypeScope obj, Boolean obj_instanced, List`1 arg_types, expression[] args) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3275 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3334 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2919 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(method_call _method_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3284 - в PascalABCCompiler.SyntaxTree.method_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 15347 - в CodeCompletion.DomSyntaxTreeVisitor.visit(dot_node _dot_node) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2888 - в PascalABCCompiler.SyntaxTree.dot_node.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 14519 - в CodeCompletion.DomSyntaxTreeVisitor.visit(procedure_call _procedure_call) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 4036 - в PascalABCCompiler.SyntaxTree.procedure_call.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 22005 - в CodeCompletion.DomSyntaxTreeVisitor.visit(statement_list _statement_list) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 183 - в PascalABCCompiler.SyntaxTree.statement_list.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 752 - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2747 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2743 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2743 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2743 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2743 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 2743 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 60 -Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. -Имя параметра: index - в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) - в System.Collections.Generic.List`1.get_Item(Int32 index) - в CodeCompletion.DomSyntaxTreeVisitor.visit(array_const_new acn) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 5612 - в PascalABCCompiler.SyntaxTree.array_const_new.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 54187 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 246 -Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. -Имя параметра: index - в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) - в System.Collections.Generic.List`1.get_Item(Int32 index) - в CodeCompletion.DomSyntaxTreeVisitor.visit(array_const_new acn) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 5612 - в PascalABCCompiler.SyntaxTree.array_const_new.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 54187 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 246 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 7968 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 560 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.DomSyntaxTreeVisitor.visit(program_module _program_module) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 3019 - в PascalABCCompiler.SyntaxTree.program_module.visit(IVisitor visitor) в D:\PABC_Git\SyntaxTree\tree\Tree.cs:строка 13211 - в CodeCompletion.DomSyntaxTreeVisitor.Convert(compilation_unit cu) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 63 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 -Ссылка на объект не указывает на экземпляр объекта. - в CodeCompletion.UnknownScope.IsEqual(SymScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 8077 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 410 - в CodeCompletion.SymScope.GetExtensionMethods(TypeScope ts, String name) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 482 - в CodeCompletion.SymScope.GetExtensionMethods(String name, TypeScope ts) в D:\PABC_Git\CodeCompletion\SymTable.cs:строка 367 - в CodeCompletion.DomSyntaxTreeVisitor.visit(bin_expr _bin_expr) в D:\PABC_Git\CodeCompletion\DomSyntaxTreeVisitor.cs:строка 561 diff --git a/bin/Lib/xPT4MakerNetX.pas b/bin/Lib/xPT4MakerNetX.pas new file mode 100644 index 000000000..3606b9f0a --- /dev/null +++ b/bin/Lib/xPT4MakerNetX.pas @@ -0,0 +1,1691 @@ + +/// Конструктор учебных заданий для задачника Programming Taskbook. +/// Версия 1.9 от 26.03.2023 (С) М. Э. Абрамян, 2016-2023. +/// Все компоненты конструктора могут вызываться либо как классовые методы класса pt, +/// либо как обычные константы и процедуры. +unit xPT4MakerNetX; + +interface + +const + OptionAllLanguages = 1; // группа доступна для всех языков + OptionPascalLanguages = 2; // группа доступна для всех реализаций Паскаля + OptionNETLanguages = 4; // группа доступна для всех NET-языков + OptionUseAddition = 8; // группа доступна только при наличии файла дополнений + OptionHideExamples = 16; // не отображать раздел с примером верного решения + +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр topic определяет имя подгруппы и является необязательным. +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +procedure NewTask(topic, tasktext: string); + + +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +procedure NewTask(tasktext: string); + + +/// Добавляет комментарий в новой строке раздела исходных даннных. +procedure DataComm(comm: string); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm: string; a: object); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string; a2: object); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); + +/// Добавляет последовательность логических данных в раздел исходных данных. +procedure Data(seq: sequence of boolean); + +/// Добавляет последовательность целых чисел в раздел исходных данных. +procedure Data(seq: sequence of integer); + +/// Добавляет последовательность вещественных чисел в раздел исходных данных. +procedure Data(seq: sequence of real); + +/// Добавляет последовательность символов в раздел исходных данных. +procedure Data(seq: sequence of char); + +/// Добавляет последовательность строк в раздел исходных данных. +procedure Data(seq: sequence of string); + +/// Добавляет комментарий в новой строке раздела результатов. +procedure ResComm(comm: string); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm: string; a: object); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string; a2: object); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); + +/// Добавляет последовательность логических данных в раздел результатов. +procedure Res(seq: sequence of boolean); + +/// Добавляет последовательность целых чисел в раздел результатов. +procedure Res(seq: sequence of integer); + +/// Добавляет последовательность вещественных чисел в раздел результатов. +procedure Res(seq: sequence of real); + +/// Добавляет последовательность символов в раздел результатов. +procedure Res(seq: sequence of char); + +/// Добавляет последовательность строк в раздел результатов. +procedure Res(seq: sequence of string); + +/// Задает минимальную ширину поля вывода для числовых данных +/// (числа выравниваются по правому краю поля вывода, +/// т.е. при необходимости дополняются слева пробелами). +/// Если n не лежит в диапазоне 0..10, то вызов процедуры игнорируется. +/// По умолчанию минимальная ширина поля вывода полагается равной 0. +procedure SetWidth(n: integer); + +/// Задает формат отображения вещественных чисел: +/// с фиксированной точкой и n дробными знаками при n > 0, +/// с плавающей точкой и n дробными знаками при n < 0, +/// с плавающей точкой и 6 дробными знаками при n = 0. +/// Если n по модулю превосходит 10, то вызов процедуры игнорируется. +/// По умолчанию устанавливается формат с фиксированной точкой +/// и 2 дробными знаками. +procedure SetPrecision(n: integer); + +/// Задает количество тестовых запусков, выполняемых +/// для проверки правильности программы (от 2 до 10). +/// По умолчанию число тестовых запусков полагается равным 5. +procedure SetTestCount(n: integer); + +/// Задает минимально необходимое количество элементов +/// исходных данных, которое требуется ввести для правильного +/// решения задачи в случае текущего набора исходных данных. +/// При отсутствии процедуры предполагается, +/// что для правильного решения надо ввести все исходные данные. +procedure SetRequiredDataCount(n: integer); + +/// Возвращает номер текущего тестового запуска +/// (запуски нумеруются от 1). +function CurrentTest: integer; + +/// Генерирует случайное целое число в диапазоне от M до N включительно. +/// Если M >= N, то возвращает M. +function Random(M, N: integer): integer; + +/// Генерирует случайное вещественное число на промежутке [A, B). +/// Если промежуток [A, B) пуст, то возвращает A. +function Random(A, B: real): real; + +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с одним дробным знаком и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до одного дробного знака и снабженное добавкой порядка 1e-7. +function Random1(A, B: real): real; + +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с двумя дробными знаками и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до двух дробных знаков и снабженное добавкой порядка 1e-7. +function Random2(A, B: real): real; + +/// Генерирует случайную строку длины len, состоящую +/// из цифр и строчных (т.е. маленьких) латинских букв. +function RandomName(len: integer): string; + +/// Создает новую группу с кратким описанием GroupDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса xPT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer := 0); + +/// Создает новую группу с кратким описанием GroupDescription, английским описанием GroupEnDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer := 0); + +/// Обеспечивает регистрацию созданной группы в электронном задачнике. +/// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string), +/// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные). +procedure ActivateNET(S: string); + +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +procedure UseTask(GroupName: string; TaskNumber: integer); + +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); + +/// Возвращает массив из 116 русских слов. +function GetWords: array of string; +/// Возвращает массив из 116 английских слов. +function GetEnWords: array of string; +/// Возвращает массив из 61 русского предложения. +function GetSentences: array of string; +/// Возвращает массив из 61 английского предложения. +function GetEnSentences: array of string; +/// Возвращает массив из 85 русских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function GetTexts: array of string; +/// Возвращает массив из 85 английских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function GetEnTexts: array of string; + +/// Возвращает случайное русское слово из массива, +/// входящего в конструктор учебных заданий. +function RandomWord: string; +/// Возвращает случайное английское слово из массива, +/// входящего в конструктор учебных заданий. +function RandomEnWord: string; +/// Возвращает случайное русское предложение из массива, +/// входящего в конструктор учебных заданий. +function RandomSentence: string; +/// Возвращает случайное английское предложение из массива, +/// входящего в конструктор учебных заданий. +function RandomEnSentence: string; +/// Возвращает случайный русский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function RandomText: string; +/// Возвращает случайный английский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function RandomEnText: string; + + +/// Добавляет в задание исходный файл целых чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +procedure DataFileInteger(FileName: string); +/// Добавляет в задание исходный файл вещественных чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +procedure DataFileReal(FileName: string); +/// Добавляет в задание исходный символьный файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Символы должны +/// храниться в файле в однобайтной кодировке. +procedure DataFileChar(FileName: string); +/// Добавляет в задание исходный строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе исходных данных. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +procedure DataFileString(FileName: string); +/// Добавляет в задание исходный текстовый файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Длина каждой строки +/// текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +procedure DataText(FileName: string; LineCount: integer := 4); + +/// Добавляет в задание результирующий файл целых чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +procedure ResFileInteger(FileName: string); +/// Добавляет в задание результирующий файл вещественных чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +procedure ResFileReal(FileName: string); +/// Добавляет в задание результирующий символьный файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Символы должны храниться в файле в однобайтной кодировке. +procedure ResFileChar(FileName: string); +/// Добавляет в задание результирующий строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе результатов. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +procedure ResFileString(FileName: string); +/// Добавляет в задание результирующий текстовый файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Длина каждой строки текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +procedure ResText(FileName: string; LineCount: integer := 5); + +type pt = class + private + constructor Create; + begin + end; + public +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна для всех языков. + class function OptionAllLanguages: integer; + begin + result := xPT4MakerNetX.OptionAllLanguages; + end; +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна для всех реализаций языка Pascal. + class function OptionPascalLanguages: integer; + begin + result := xPT4MakerNetX.OptionPascalLanguages; + end; +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна для всех NET-языков. + class function OptionNETLanguages: integer; + begin + result := xPT4MakerNetX.OptionNETLanguages; + end; +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна только при наличии связанного с ней файла дополнений. + class function OptionUseAddition: integer; + begin + result := xPT4MakerNetX.OptionUseAddition; + end; +/// Дополнительная опция для процедуры NewGroup: +/// в заданиях данной группы не будет отображаться пример верного решения. + class function OptionHideExamples: integer; + begin + result := xPT4MakerNetX.OptionHideExamples; + end; +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр topic определяет имя подгруппы (является необязательным). +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +class procedure NewTask(topic, tasktext: string); +begin + xPT4MakerNetX.NewTask(topic, tasktext); +end; + +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +class procedure NewTask(tasktext: string); +begin + xPT4MakerNetX.NewTask(tasktext); +end; + +/// Добавляет комментарий в новой строке раздела исходных даннных. +class procedure DataComm(comm: string); +begin + xPT4MakerNetX.DataComm(comm); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm: string; a: object); +begin + xPT4MakerNetX.Data(comm, a); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string); +begin + xPT4MakerNetX.Data(comm1, a1, comm2); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string; a2: object); +begin + xPT4MakerNetX.Data(comm1, a1, comm2, a2); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + xPT4MakerNetX.Data(comm1, a1, comm2, a2, comm3); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + xPT4MakerNetX.Data(comm1, a1, comm2, a2, comm3, a3); +end; +/// Добавляет последовательность логических данных в раздел исходных данных. +class procedure Data(seq: sequence of boolean); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность целых чисел в раздел исходных данных. +class procedure Data(seq: sequence of integer); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность вещественных чисел в раздел исходных данных. +class procedure Data(seq: sequence of real); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность символов в раздел исходных данных. +class procedure Data(seq: sequence of char); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность строк в раздел исходных данных. +class procedure Data(seq: sequence of string); +begin + xPT4MakerNetX.Data(seq); +end; + +/// Добавляет комментарий в новой строке раздела результатов. +class procedure ResComm(comm: string); +begin + xPT4MakerNetX.ResComm(comm); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm: string; a: object); +begin + xPT4MakerNetX.Res(comm, a); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string); +begin + xPT4MakerNetX.Res(comm1, a1, comm2); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string; a2: object); +begin + xPT4MakerNetX.Res(comm1, a1, comm2, a2); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + xPT4MakerNetX.Res(comm1, a1, comm2, a2, comm3); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + xPT4MakerNetX.Res(comm1, a1, comm2, a2, comm3, a3); +end; +/// Добавляет последовательность логических данных в раздел результатов. +class procedure Res(seq: sequence of boolean); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность целых чисел в раздел результатов. +class procedure Res(seq: sequence of integer); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность вещественных чисел в раздел результатов. +class procedure Res(seq: sequence of real); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность символов в раздел результатов. +class procedure Res(seq: sequence of char); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность строк в раздел результатов. +class procedure Res(seq: sequence of string); +begin + xPT4MakerNetX.Res(seq); +end; + +/// Задает минимальную ширину поля вывода для числовых данных +/// (числа выравниваются по правому краю поля вывода, +/// т.е. при необходимости дополняются слева пробелами). +/// Если n не лежит в диапазоне 0..10, то вызов процедуры игнорируется. +/// По умолчанию минимальная ширина поля вывода полагается равной 0. +class procedure SetWidth(n: integer); +begin + xPT4MakerNetX.SetWidth(n); +end; +/// Задает формат отображения вещественных чисел: +/// с фиксированной точкой и n дробными знаками при n > 0, +/// с плавающей точкой и n дробными знаками при n < 0, +/// с плавающей точкой и 6 дробными знаками при n = 0. +/// Если n по модулю превосходит 10, то вызов процедуры игнорируется. +/// По умолчанию устанавливается формат с фиксированной точкой +/// и 2 дробными знаками. +class procedure SetPrecision(n: integer); +begin + xPT4MakerNetX.SetPrecision(n); +end; +/// Задает количество тестовых запусков, выполняемых +/// для проверки правильности программы (от 2 до 10). +/// По умолчанию число тестовых запусков полагается равным 5. +class procedure SetTestCount(n: integer); +begin + xPT4MakerNetX.SetTestCount(n); +end; +/// Задает минимально необходимое количество элементов +/// исходных данных, которое требуется ввести для правильного +/// решения задачи в случае текущего набора исходных данных. +/// При отсутствии процедуры предполагается, +/// что для правильного решения надо ввести все исходные данные. +class procedure SetRequiredDataCount(n: integer); +begin + xPT4MakerNetX.SetRequiredDataCount(n); +end; +/// Возвращает номер текущего тестового запуска +/// (запуски нумеруются от 1). +class function CurrentTest: integer; +begin + result := xPT4MakerNetX.CurrentTest; +end; + +/// Генерирует случайное целое число в диапазоне от M до N включительно. +/// Если M >= N, то возвращает M. +class function Random(M, N: integer): integer; +begin + result := xPT4MakerNetX.Random(M, N); +end; +/// Генерирует случайное вещественное число на промежутке [A, B). +/// Если промежуток [A, B) пуст, то возвращает A. +class function Random(A, B: real): real; +begin + result := xPT4MakerNetX.Random(A, B); +end; +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с одним дробным знаком и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до одного дробного знака и снабженное добавкой порядка 1e-7. +class function Random1(A, B: real): real; +begin + result := xPT4MakerNetX.Random1(A, B); +end; +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с двумя дробными знаками и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до двух дробных знаков и снабженное добавкой порядка 1e-7. +class function Random2(A, B: real): real; +begin + result := xPT4MakerNetX.Random2(A, B); +end; +/// Генерирует случайную строку длины len, состоящую +/// из цифр и строчных (т.е. маленьких) латинских букв. +class function RandomName(len: integer): string; +begin + result := xPT4MakerNetX.RandomName(len); +end; + +/// Создает новую группу с кратким описанием GroupDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса xPT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +class procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer := 0); +begin + xPT4MakerNetX.NewGroup(GroupDescription, GroupAuthor, Options); +end; +/// Создает новую группу с кратким описанием GroupDescription, английским описанием GroupEnDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +class procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer := 0); +begin + xPT4MakerNetX.NewGroup(GroupDescription, GroupEnDescription, GroupAuthor, Options); +end; +/// Обеспечивает регистрацию созданной группы в электронном задачнике. +/// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string), +/// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные). +class procedure ActivateNET(S: string); +begin + xPT4MakerNetX.ActivateNET(S); +end; +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +class procedure UseTask(GroupName: string; TaskNumber: integer); +begin + xPT4MakerNetX.UseTask(GroupName, TaskNumber); +end; +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +class procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + xPT4MakerNetX.UseTask(GroupName, TaskNumber, TopicDescription); +end; +/// Возвращает массив из 116 русских слов. +class function GetWords: array of string; +begin + result := xPT4MakerNetX.GetWords; +end; +/// Возвращает массив из 116 английских слов. +class function GetEnWords: array of string; +begin + result := xPT4MakerNetX.GetEnWords; +end; +/// Возвращает массив из 61 русского предложения. +class function GetSentences: array of string; +begin + result := xPT4MakerNetX.GetSentences; +end; +/// Возвращает массив из 61 английского предложения. +class function GetEnSentences: array of string; +begin + result := xPT4MakerNetX.GetEnSentences; +end; +/// Возвращает массив из 85 русских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function GetTexts: array of string; +begin + result := xPT4MakerNetX.GetTexts; +end; +/// Возвращает массив из 85 английских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function GetEnTexts: array of string; +begin + result := xPT4MakerNetX.GetEnTexts; +end; +/// Возвращает случайное русское слово из массива, +/// входящего в конструктор учебных заданий. +class function RandomWord: string; +begin + result := xPT4MakerNetX.RandomWord; +end; +/// Возвращает случайное английское слово из массива, +/// входящего в конструктор учебных заданий. +class function RandomEnWord: string; +begin + result := xPT4MakerNetX.RandomEnWord; +end; +/// Возвращает случайное русское предложение из массива, +/// входящего в конструктор учебных заданий. +class function RandomSentence: string; +begin + result := xPT4MakerNetX.RandomSentence; +end; +/// Возвращает случайное английское предложение из массива, +/// входящего в конструктор учебных заданий. +class function RandomEnSentence: string; +begin + result := xPT4MakerNetX.RandomEnSentence; +end; +/// Возвращает случайный русский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function RandomText: string; +begin + result := xPT4MakerNetX.RandomText; +end; +/// Возвращает случайный английский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function RandomEnText: string; +begin + result := xPT4MakerNetX.RandomEnText; +end; + +/// Добавляет в задание исходный файл целых чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +class procedure DataFileInteger(FileName: string); +begin + xPT4MakerNetX.DataFileInteger(FileName); +end; +/// Добавляет в задание исходный файл вещественных чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +class procedure DataFileReal(FileName: string); +begin + xPT4MakerNetX.DataFileReal(FileName); +end; +/// Добавляет в задание исходный символьный файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Символы должны +/// храниться в файле в однобайтной кодировке. +class procedure DataFileChar(FileName: string); +begin + xPT4MakerNetX.DataFileChar(FileName); +end; +/// Добавляет в задание исходный строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе исходных данных. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +class procedure DataFileString(FileName: string); +begin + xPT4MakerNetX.DataFileString(FileName); +end; +/// Добавляет в задание исходный текстовый файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Длина каждой строки +/// текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +class procedure DataText(FileName: string; LineCount: integer := 4); +begin + xPT4MakerNetX.DataText(FileName); +end; + +/// Добавляет в задание результирующий файл целых чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +class procedure ResFileInteger(FileName: string); +begin + xPT4MakerNetX.ResFileInteger(FileName); +end; +/// Добавляет в задание результирующий файл вещественных чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +class procedure ResFileReal(FileName: string); +begin + xPT4MakerNetX.ResFileReal(FileName); +end; +/// Добавляет в задание результирующий символьный файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Символы должны храниться в файле в однобайтной кодировке. +class procedure ResFileChar(FileName: string); +begin + xPT4MakerNetX.ResFileChar(FileName); +end; +/// Добавляет в задание результирующий строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе результатов. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +class procedure ResFileString(FileName: string); +begin + xPT4MakerNetX.ResFileString(FileName); +end; +/// Добавляет в задание результирующий текстовый файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Длина каждой строки текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +class procedure ResText(FileName: string; LineCount: integer := 5); +begin + xPT4MakerNetX.ResText(FileName); +end; +end; + + +implementation +{$reference system.windows.forms.dll} +uses System.Reflection, xPT4TaskMakerNET, System.Windows.Forms, System; + +const + alphabet = '0123456789abcdefghijklmnopqrstuvwxyz'; + ErrMes1 = 'Error: Раздел размером более 5 строк не может содержать файловые данные.'; + ErrMes2 = 'Error: При наличии файловых данных раздел не может содержать более 5 строк.'; + ErrMes3 = 'Error: Количество исходных данных превысило 200.'; + ErrMes4 = 'Error: Количество результирующих данных превысило 200.'; + ErrMes5 = 'Error: При определении задания первой должна вызываться процедура NewTask.'; + ErrMes6 = 'Error: При определении задания не указаны исходные данные.'; + ErrMes7 = 'Error: При определении задания не указаны результирующие данные.'; + +var + yd, yr, ye, nd, nr, pr, wd: integer; + nt, ut, fd, fr: boolean; + fmt: string; + tasks := new List(100); + +procedure Show(s: string); +begin + MessageBox.Show(s, 'Error', MessageBoxButtons.OK, MessageBoxIcon.Error); +end; + +function ErrorMessage(s: string): string; +begin + result := Copy(s + new string(' ', 100), 1, 78); +end; + +procedure ErrorInfo(s: string); +begin + xPT4TaskMakerNET.TaskText('\B'+ErrorMessage(s)+'\b', 0, ye); + ye := ye + 1; + if ye > 5 then ye := 0; +end; + +function CheckTT: boolean; +begin + result := ut; + if not nt then + begin + NewTask(''); + ErrorInfo(ErrMes5); + end; +end; + +function RandomName(len: integer): string; +begin + result := ArrRandom(len, 1, alphabet.Length) + .Select(e -> alphabet[e]).JoinIntoString(''); +end; + +procedure SetPrecision(n: integer); +begin + if CheckTT then exit; + if abs(n) > 10 then exit; + pr := n; + if n < 0 then + begin + fmt := 'e' + IntToStr(-n); + n := 0; + end + else if n = 0 then + fmt := 'e6' + else + fmt := 'f' + IntToStr(n); + xPT4TaskMakerNET.SetPrecision(n); +end; + +procedure SetWidth(n: integer); +begin + if (n >= 0) and (n <= 20) then + wd := n; +end; + +procedure NewTask(topic, tasktext: string); +begin + if nt then exit; + xPT4TaskMakerNET.CreateTask(topic); + xPT4TaskMakerNET.TaskText(tasktext); + nt := true; // вызвана процедура NewTask + ut := false; // было подключено существующее задание (процедурой UseTask) + ye := 1; // текущий номер строки для вывода сообщения об ошибке + yd := 0; // текущий номер строки в разделе исходных данных + yr := 0; // текущий номер строки в разделе результатов + nd := 0; // количество элементов исходных данных + nr := 0; // количество элементов результирующих данных + fd := false; // наличие файловых данных в разделе исходных данных + fr := false; // наличие файловых данных в разделе результатов + pr := 2; // текущая точность вывода вещественных данных + fmt := 'f2'; // текущий формат вывода вещественных данных + wd := 0; // текущая ширина поля вывода для чисел +end; + +function wreal(w: integer; x: real): integer; +begin + result := w; + if w = 0 then + begin + result := Format('{0,0:' + fmt + '}', x).Length; + if (pr <= 0) and (x >= 0) then + result := result + 1; + end; +end; + +function winteger(w: integer; x: integer): integer; +begin + result := w; + if w = 0 then + result := IntToStr(x).Length; +end; + +procedure NewTask(tasktext: string); +begin + NewTask('', tasktext); +end; + +procedure Data(s: string; a: object; x, y, w: integer); +begin + if (y > 5) and fd then + begin + ErrorInfo(ErrMes2); + exit; + end; + inc(nd); + if nd > 200 then + begin + ErrorInfo(ErrMes3); + exit; + end; + if a is boolean then + DataB(s, boolean(a), x, y) + else if a is integer then + DataN(s, integer(a), x, y, winteger(w, integer(a))) + else if a is real then + DataR(s, real(a), x, y, wreal(w, real(a))) + else if a is char then + DataC(s, char(a), x, y) + else if a is string then + DataS(s, string(a), x, y) + else + DataComment(Copy(s + '!WrongType:' + a.GetType.Name, 1, 38), x, y); +end; + +procedure Res(s: string; a: object; x, y, w: integer); +begin + if (y > 5) and fr then + begin + ErrorInfo(ErrMes2); + exit; + end; + inc(nr); + if nr > 200 then + begin + ErrorInfo(ErrMes4); + exit; + end; + if a is boolean then + ResultB(s, boolean(a), x, y) + else if a is integer then + ResultN(s, integer(a), x, y, winteger(w, integer(a))) + else if a is real then + ResultR(s, real(a), x, y, wreal(w, real(a))) + else if a is char then + ResultC(s, char(a), x, y) + else if a is string then + ResultS(s, string(a), x, y) + else + ResultComment(Copy(s + '!WrongType:' + a.GetType.Name, 1, 38), x, y); +end; + +procedure DataComm(comm: string); +begin + if CheckTT then exit; + inc(yd); + DataComment(comm, 0, yd); +end; + +procedure Data(comm: string; a: object); +begin + if CheckTT then exit; + inc(yd); + Data(comm, a, 0, yd, wd); +end; + +procedure Data(comm1: string; a1: object; comm2: string); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + DataComment(comm2, xRight, yd); +end; + +procedure Data(comm1: string; a1: object; comm2: string; a2: object); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + Data(comm2, a2, xRight, yd, wd); +end; + +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + Data(comm2, a2, 0, yd, wd); + DataComment(comm3, xRight, yd); +end; + +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + Data(comm2, a2, 0, yd, wd); + Data(comm3, a3, xRight, yd, wd); +end; + +procedure Data(seq: sequence of boolean); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := 5; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of integer); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := wd; + if w = 0 then + w := seq.Select(e -> IntToStr(e)).Max(e -> e.Length); + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of real); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := wd; + if w = 0 then + w := seq.Select(e -> wreal(0, e)(*Format('{0,0:'+fmt+'}', e)*)).Max; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of char); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := 3; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of string); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := seq.Max(e -> e.Length) + 2; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure ResComm(comm: string); +begin + if CheckTT then exit; + inc(yr); + ResultComment(comm, 0, yr); +end; + +procedure Res(comm: string; a: object); +begin + if CheckTT then exit; + inc(yr); + Res(comm, a, 0, yr, wd); +end; + +procedure Res(comm1: string; a1: object; comm2: string); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + ResultComment(comm2, xRight, yr); +end; + +procedure Res(comm1: string; a1: object; comm2: string; a2: object); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + Res(comm2, a2, xRight, yr, wd); +end; + +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + Res(comm2, a2, 0, yr, wd); + ResultComment(comm3, xRight, yr); +end; + +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + Res(comm2, a2, 0, yr, wd); + Res(comm3, a3, xRight, yr, wd); +end; + +procedure Res(seq: sequence of boolean); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := 5; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of integer); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := wd; + if w = 0 then + w := seq.Select(e -> IntToStr(e)).Max(e -> e.Length); + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of real); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := wd; + if w = 0 then + w := seq.Select(e -> wreal(0, e)).Max; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of char); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := 3; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of string); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := seq.Max(e -> e.Length) + 2; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + + +procedure ActivateNET(S: string); +begin + xPT4TaskMakerNET.ActivateNET(S); +end; + +procedure RunTask(num: integer); +var ut0: boolean; +begin + try + try + if (num > 0) and (num <= tasks.Count) then + tasks[num - 1].Invoke(nil, nil); + finally + nt := false; + ut0 := ut; + ut := false; + end; + except + on e: TargetInvocationException do + begin + ErrorInfo('Error ' + + e.InnerException.GetType.Name + ': ' + + e.InnerException.message); + end; + end; + if ut0 then exit; + if (nd = 0) and not fd then + DataS('\B'+Copy(ErrorMessage(ErrMes6),1,76)+'\b', '', 1, 1); + if (nr = 0) and not fr then + ResultS('\B'+Copy(ErrorMessage(ErrMes7),1,76)+'\b', '', 1, 1); +end; + +function GetGroupName(assname: string; var libname: string): string; +begin + libname := copy(assname, 1, pos(',', assname)-1); + result := libname; + var p := pos('_', libname); + if p > 0 then + delete(result, p, 100); // удаление суффикса, определяющего язык интерфейса + delete(result, 1, 4); // удаление префикса xPT4 +end; + +function AcceptedLanguage(opt: integer): boolean; +begin + var lang := CurrentLanguage; + result := (lang = lgPascalABCNET) + or (opt and OptionAllLanguages = OptionAllLanguages) + or (lang and lgNET <> 0) and (opt and OptionNETLanguages = OptionNETLanguages) + or (lang and lgPascal = lgPascal) and (opt and OptionPascalLanguages = OptionPascalLanguages); +end; + +procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer); +begin + NewGroup(GroupDescription, '', GroupAuthor, Options); +end; + +procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer); +begin + if not AcceptedLanguage(Options) then + exit; // недопустимый текущий язык + var ass := Assembly.GetCallingAssembly; + var LibName := ''; + var GroupName := GetGroupName(ass.FullName, LibName); + tasks.Clear; + var GroupKey := 'GK'; + foreach var e in ass.GetType(LibName + '.' + LibName).GetMethods.OrderBy(e -> e.Name.ToUpper) do //2018.08 + if e.Name.ToUpper.StartsWith('TASK') then + begin + tasks.Add(e); + GroupKey := GroupKey + Copy(e.Name, 5, 100); + end; + if tasks.Count = 0 then + begin + Show('Группа ' + GroupName + ' не содержит заданий'#13#10+ + '(имена процедур с заданиями должны начинаться с текста "Task").'); + exit; + end; + if tasks.Count > 999 then + begin + Show('Группа ' + GroupName + ' содержит более 999 заданий.'); + exit; + end; + GroupKey := Copy(GroupKey, 1, 30); + if Options and OptionUseAddition = OptionUseAddition then + GroupKey := GroupKey + '#UseAddition#'; + if Options and OptionHideExamples = OptionHideExamples then + GroupKey := GroupKey + '#HideExamples#'; + if GroupEnDescription.Trim <> '' then + GroupKey := GroupKey + '#EnTopic<' + GroupEnDescription.Trim + '>#'; + CreateGroup(GroupName, GroupDescription, GroupAuthor, + GroupKey, tasks.Count, RunTask); +end; + + +procedure SetTestCount(n: integer); +begin + if CheckTT then exit; + xPT4TaskMakerNET.SetTestCount(n); +end; + +procedure SetRequiredDataCount(n: integer); +begin + if CheckTT then exit; + xPT4TaskMakerNET.SetRequiredDataCount(n); +end; + +function Random(M, N: integer): integer; +begin + result := xPT4TaskMakerNET.RandomN(M, N); +end; + +function Random(A, B: real): real; +begin + result := xPT4TaskMakerNET.RandomR(A, B); +end; + +function Random1(A, B: real): real; +begin + result := Random(Round(a*10), Round(b*10)) / 10 + + Random * 1.0e-7; +end; + +function Random2(A, B: real): real; +begin + result := Random(Round(a*100), Round(b*100)) / 100 + + Random * 1.0e-7; +end; + +function CurrentTest: integer; +begin + if CheckTT then exit; + result := xPT4TaskMakerNET.CurrentTest; +end; + +procedure UseTask(GroupName: string; TaskNumber: integer); +begin + if ut then exit; + xPT4TaskMakerNET.UseTask(GroupName, TaskNumber); + ut := true; +end; + +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + if ut then exit; + xPT4TaskMakerNET.UseTask(GroupName, TaskNumber, TopicDescription); + ut := true; +end; + +function GetWords: array of string; +begin + Result := ArrGen(WordCount, i -> WordSample(i)); +end; + +function RandomWord: string; +begin + Result := WordSample(RandomN(0, WordCount - 1)); +end; + +function GetEnWords: array of string; +begin + Result := ArrGen(EnWordCount, i -> EnWordSample(i)); +end; + +function RandomEnWord: string; +begin + Result := EnWordSample(RandomN(0, EnWordCount - 1)); +end; + +function GetSentences: array of string; +begin + Result := ArrGen(SentenceCount, i -> SentenceSample(i)); +end; + +function RandomSentence: string; +begin + Result := SentenceSample(RandomN(0, SentenceCount - 1)); +end; + +function GetEnSentences: array of string; +begin + Result := ArrGen(EnSentenceCount, i -> EnSentenceSample(i)); +end; + +function RandomEnSentence: string; +begin + Result := EnSentenceSample(RandomN(0, EnSentenceCount - 1)); +end; + +function GetTexts: array of string; +begin + Result := ArrGen(TextCount, i -> TextSample(i)); +end; + +function RandomText: string; +begin + Result := TextSample(RandomN(0, TextCount - 1)); +end; + +function GetEnTexts: array of string; +begin + Result := ArrGen(EnTextCount, i -> EnTextSample(i)); +end; + +function RandomEnText: string; +begin + Result := EnTextSample(RandomN(0, EnTextCount - 1)); +end; + +procedure DataFileInteger(FileName: string); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of integer; + Reset(f, FileName); + while not EOF(f) do + begin + var a: integer; + read(f, a); + var s := IntToStr(a); + if s.Length > w then + w := s.Length; + end; + Close(f); + except + on ex: Exception do + begin + DataComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fd := true; + DataFileN(FileName, yd, w + 2); +end; + +procedure DataFileReal(FileName: string); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of real; + Reset(f, FileName); + while not EOF(f) do + begin + var a: real; + read(f, a); + var s := wreal(0, a); + if s > w then + w := s; + end; + Close(f); + except + on ex: Exception do + begin + DataComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fd := true; + DataFileR(FileName, yd, w + 2); +end; + +procedure DataFileChar(FileName: string); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fd := true; + DataFileC(FileName, yd, 5); +end; + +procedure DataFileString(FileName: string); +begin + + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of ShortString; + Reset(f, FileName); + while not EOF(f) do + begin + var a: ShortString; + read(f, a); + if Length(a) > w then + w := Length(a); + end; + Close(f); + except + on ex: Exception do + begin + DataComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fd := true; + DataFileS(FileName, yd, w + 4); + +end; + +procedure DataText(FileName: string; LineCount: integer); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fd := true; + var yd2 := yd + LineCount - 1; + if yd2 > 5 then yd2 := 5; + DataFileT(FileName, yd, yd2); + yd := yd2; +end; + +procedure ResFileInteger(FileName: string); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of integer; + Reset(f, FileName); + while not EOF(f) do + begin + var a: integer; + read(f, a); + var s := IntToStr(a); + if s.Length > w then + w := s.Length; + end; + Close(f); + except + on ex: Exception do + begin + ResComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fr := true; + ResultFileN(FileName, yr, w + 2); +end; + +procedure ResFileReal(FileName: string); +begin + if CheckTT then exit; + ResComm(fmt); + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of real; + Reset(f, FileName); + while not EOF(f) do + begin + var a: real; + read(f, a); + var s := wreal(0, a); + if s > w then + w := s; + end; + Close(f); + except + on ex: Exception do + begin + ResComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fr := true; + ResultFileR(FileName, yr, w + 2); +end; + +procedure ResFileChar(FileName: string); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fr := true; + ResultFileC(FileName, yr, 5); +end; + +procedure ResFileString(FileName: string); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of ShortString; + Reset(f, FileName); + while not EOF(f) do + begin + var a: ShortString; + read(f, a); + if Length(a) > w then + w := Length(a); + end; + Close(f); + except + on ex: Exception do + begin + ResComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fr := true; + ResultFileS(FileName, yr, w + 4); +end; + +procedure ResText(FileName: string; LineCount: integer); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fr := true; + var yr2 := yr + LineCount - 1; + if yr2 > 5 then yr2 := 5; + ResultFileT(FileName, yr, yr2); + yr := yr2; +end; + +end. \ No newline at end of file diff --git a/bin/Lib/xPT4TaskMakerNET.pas b/bin/Lib/xPT4TaskMakerNET.pas new file mode 100644 index 000000000..a52495cf4 --- /dev/null +++ b/bin/Lib/xPT4TaskMakerNET.pas @@ -0,0 +1,1231 @@ +/// Конструктор для электронного задачника Programming Taskbook 4.23 + +unit xPT4TaskMakerNET; + +//------------------------------------------------------------------------------ +// Конструктор для электронного задачника Programming Taskbook 4.23 +//------------------------------------------------------------------------------ +// Модуль для создания NET-библиотек с группами заданий в системе PascalABC.NET +// +// Copyright (c) 2013-2023 М.Э.Абрамян +// Электронный задачник Programming Taskbook Copyright (c) М.Э.Абрамян,1998-2023 +//------------------------------------------------------------------------------ + + +interface + +const + + xCenter = 0; + xLeft = 100; + xRight = 200; + + SampleError = '#ERROR?'; + MaxLineCount = 50; + + lgPascal = $0000001; + lgPascalABCNET = $0000401; + lgPascalNET = $0000400; + lgPascalABCNET_flag + = $0000400; // добавлено в версии 4.14 + lgVB = $0000002; + lgCPP = $0000004; + lg1C = $0000040; + lgPython = $0000080; + lgPython3 = $1000080; // добавлено в версии 4.14 + lgPython3_flag = $1000000; // добавлено в версии 4.14 + lgCS = $0000100; + lgVBNET = $0000200; + lgJava = $0010000; // добавлено в версии 4.11 + lgRuby = $0020000; // добавлено в версии 4.12 + lgWithPointers = $000003D; + lgWithObjects = $0FFFF80; // изменено в версии 4.22 + lgNET = $000FF00; + lgAll = $0FFFFFF; // изменено в версии 4.10 + lgFS = $0000800; // добавлено в версии 4.19 + lgJulia = $0040000; // добавлено в версии 4.22 + lgC = $0000008; // добавлено в версии 4.23 + +type + +/// Процедурный тип, используемый при создании групп заданий + TInitTaskProc = procedure(N: integer); + +/// Указатель на узел динамической структуры + PNode = ^TNode; + +/// Узел динамической структуры + TNode = record + Data: integer; + Next: PNode; + Prev: PNode; + Left: PNode; + Right: PNode; + Parent: PNode; + end; + +/// Добавляет к задачнику новую группу заданий с указанными характеристиками +procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string; + TaskCount: integer; InitTaskProc: TInitTaskProc); + +/// Добавляет к создаваемой группе задание из другой группы +procedure UseTask(GroupName: string; TaskNumber: integer); + +/// Добавляет к создаваемой группе задание из другой группы +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); // добавлено в версии 4.19 + +/// Должна указываться первой при определении нового задания +procedure CreateTask(SubgroupName: string); overload; + + +/// Должна указываться первой при определении нового задания +procedure CreateTask; overload; + +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) +procedure CreateTask(SubgroupName: string; var ProcessCount: integer); overload; + +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) +procedure CreateTask(var ProcessCount: integer); overload; + +/// Позволяет определить текущий язык программирования, выбранный для задачника +/// Возвращает значения, связанные с константами lgXXX +function CurrentLanguage: integer; + +/// Возвращает двухбуквенную строку с описанием текущей локали +/// (в даной версии возвращается либо 'ru', либо 'en') +function CurrentLocale: string; + +/// Возвращает номер текущей версии задачника в формате 'd.dd' +/// (для версий, меньших 4.10, возвращает '4.00') +function CurrentVersion: string; // добавлено в версии 4.10 + +//----------------------------------------------------------------------------- + +/// Добавляет к формулировке задания строку +procedure TaskText(S: string; X, Y: integer); + +/// Определяет все строки формулировки задания +/// (в параметре S отдельные строки формулировки +/// должны разделяться символами #13, #10 или парой #13#10; +/// начальные и конечные пробелы в строках удаляются, +/// пустые строки в формулировку не включаются) +procedure TaskText(S: string); // добавлено в версии 4.11 + +//----------------------------------------------------------------------------- + +/// Добавляет к исходным данным элемент логического типа с комментарием +procedure DataB(Cmt: string; B: boolean; X, Y: integer); + +/// Добавляет к исходным данным элемент логического типа +procedure DataB(B: boolean; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным целочисленный элемент с комментарием +procedure DataN(Cmt: string; N: integer; X, Y, W: integer); + +/// Добавляет к исходным данным целочисленный элемент +procedure DataN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным два целочисленных элемента с общим комментарием +procedure DataN2(Cmt: string; N1, N2: integer; X, Y, W: integer); + +/// Добавляет к исходным данным два целочисленных элемента +procedure DataN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным три целочисленных элемента с общим комментарием +procedure DataN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); + +/// Добавляет к исходным данным три целочисленных элемента +procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным вещественный элемент с комментарием +procedure DataR(Cmt: string; R: real; X, Y, W: integer); + +/// Добавляет к исходным данным вещественный элемент +procedure DataR(R: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным два вещественных элемента с общим комментарием +procedure DataR2(Cmt: string; R1, R2: real; X, Y, W: integer); + +/// Добавляет к исходным данным два вещественных элемента +procedure DataR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным три вещественных элемента с общим комментарием +procedure DataR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); + +/// Добавляет к исходным данным три вещественных элемента +procedure DataR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным символьный элемент с комментарием +procedure DataC(Cmt: string; C: char; X, Y: integer); + +/// Добавляет к исходным данным символьный элемент +procedure DataC(C: char; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным строковый элемент с комментарием +procedure DataS(Cmt: string; S: string; X, Y: integer); + +/// Добавляет к исходным данным строковый элемент +procedure DataS(S: string; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным элемент типа PNode с комментарием +procedure DataP(Cmt: string; NP: integer; X, Y: integer); + +/// Добавляет к исходным данным элемент типа PNode +procedure DataP(NP: integer; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет комментарий в область исходных данных +procedure DataComment(Cmt: string; X, Y: integer); + +//----------------------------------------------------------------------------- + +/// Добавляет к результирующим данным элемент логического типа с комментарием +procedure ResultB(Cmt: string; B: boolean; X, Y: integer); + +/// Добавляет к результирующим данным элемент логического типа +procedure ResultB(B: boolean; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным целочисленный элемент с комментарием +procedure ResultN(Cmt: string; N: integer; X, Y, W: integer); + +/// Добавляет к результирующим данным целочисленный элемент +procedure ResultN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным два целочисленных элемента с общим комментарием +procedure ResultN2(Cmt: string; N1, N2: integer; X, Y, W: integer); + +/// Добавляет к результирующим данным два целочисленных элемента +procedure ResultN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным три целочисленных элемента с общим комментарием +procedure ResultN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); + +/// Добавляет к результирующим данным три целочисленных элемента +procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным вещественный элемент с комментарием +procedure ResultR(Cmt: string; R: real; X, Y, W: integer); + +/// Добавляет к результирующим данным вещественный элемент +procedure ResultR(R: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным два вещественных элемента с общим комментарием +procedure ResultR2(Cmt: string; R1, R2: real; X, Y, W: integer); + +/// Добавляет к результирующим данным два вещественных элемента +procedure ResultR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным три вещественных элемента с общим комментарием +procedure ResultR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); + +/// Добавляет к результирующим данным три вещественных элемента +procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным символьный элемент с комментарием +procedure ResultC(Cmt: string; C: char; X, Y: integer); + +/// Добавляет к результирующим данным символьный элемент +procedure ResultC(C: char; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным строковый элемент с комментарием +procedure ResultS(Cmt: string; S: string; X, Y: integer); + +/// Добавляет к результирующим данным строковый элемент +procedure ResultS(S: string; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным элемент типа PNode с комментарием +procedure ResultP(Cmt: string; NP: integer; X, Y: integer); + +/// Добавляет к результирующим данным элемент типа PNode +procedure ResultP(NP: integer; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет комментарий в область результирующих данных +procedure ResultComment(Cmt: string; X, Y: integer); + +//----------------------------------------------------------------------------- + +/// Задает число дробных знаков при отображении вещественных чисел +procedure SetPrecision(N: integer); + +/// Задает число исходных данных, минимально необходимое +/// для нахождения правильных результирующих данных +procedure SetRequiredDataCount(N: integer); + +/// Задает число тестовых испытаний (от 2 до 9), при успешном +/// прохождении которых задание будет считаться выполненным +procedure SetTestCount(N: integer); + +/// Возвращает горизонтальную координату, начиная с которой следует выводить I-й элемент из набора, +/// содержащего N элементов, при условии, что ширина каждого элемента равна W, а между элементами +/// надо указывать B пробелов (элементы нумеруются от 1) +function Center(I, N, W, B: integer): integer; + +/// Возвращает случайное целое число, лежащее +/// в диапазоне от M до N включительно. Если указанный +/// диапазон пуст, то возвращает M. +function RandomN(M, N: integer): integer; // добавлено в версии 4.11 + +/// Возвращает случайное вещественное число, лежащее +/// на полуинтервале [A, B). Если указанный полуинтервал +/// пуст, то возвращает A. +function RandomR(A, B: real): real; // добавлено в версии 4.11 + +/// Возвращает порядковый номер текущего тестового запуска +/// (учитываются только успешные тестовые запуски). Если ранее успешных +/// запусков не было, то возвращает 1. Если задание уже выполнено +/// или запущено в демонстрационном режиме, то возвращает 0. +/// При использовании предыдущих версий задачника (до 4.10 включительно) +/// всегда возвращает 0. +function CurrentTest: integer; // добавлено в версии 4.11 + +//----------------------------------------------------------------------------- + +/// Добавляет к исходным данным двоичный файл с целочисленными элементами (file of integer) +procedure DataFileN(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным двоичный файл с вещественными элементами (file of real) +procedure DataFileR(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным двоичный файл с символьными элементами (file of char) +procedure DataFileC(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным двоичный файл со строковыми элементами (file of ShortString) +procedure DataFileS(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным текстовый файл +procedure DataFileT(FileName: string; Y1, Y2: integer); + +//----------------------------------------------------------------------------- + +/// Добавляет к результирующим данным двоичный файл с целочисленными элементами (file of integer) +procedure ResultFileN(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным двоичный файл с вещественными элементами (file of real) +procedure ResultFileR(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным двоичный файл с символьными элементами (file of char) +procedure ResultFileC(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным двоичный файл со строковыми элементами (file of ShortString) +procedure ResultFileS(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным текстовый файл +procedure ResultFileT(FileName: string; Y1, Y2: integer); + +//----------------------------------------------------------------------------- + +/// Связывает номер NP с указателем P +procedure SetPointer(NP: integer; P: PNode); + +/// Добавляет к исходным данным линейную динамическую структуру +procedure DataList(NP: integer; X, Y: integer); + +/// Добавляет к результирующим данным линейную динамическую структуру +procedure ResultList(NP: integer; X, Y: integer); + +/// Добавляет к исходным данным бинарное дерево +procedure DataBinTree(NP: integer; X, Y1, Y2: integer); + +/// Добавляет к результирующим данным бинарное дерево +procedure ResultBinTree(NP: integer; X, Y1, Y2: integer); + +/// Добавляет к исходным данным дерево общего вида +procedure DataTree(NP: integer; X, Y1, Y2: integer); + +/// Добавляет к результирующим данным дерево общего вида +procedure ResultTree(NP: integer; X, Y1, Y2: integer); + +/// Отображает в текущей динамической структуре указатель с номером NP +procedure ShowPointer(NP: integer); + +/// Помечает в текущей результирующей динамической структуре указатель, требующий создания +procedure SetNewNode(NNode: integer); + +/// Помечает в текущей исходной динамической структуре указатель, требующий удаления +procedure SetDisposedNode(NNode: integer); + +//----------------------------------------------------------------------------- + +/// Возвращает количество слов-образцов для языка, соответствующего текущей локали +function WordCount: integer; //116 + +/// Возвращает количество предложений-образцов для языка, соответствующего текущей локали +function SentenceCount: integer; //61 + +/// Возвращает количество текстов-образцов для языка, соответствующего текущей локали +function TextCount: integer; //85 + +/// Возвращает слово-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали +function WordSample(N: integer): string; + +/// Возвращает предложение-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали +function SentenceSample(N: integer): string; + +/// Возвращает текст-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали, +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка +function TextSample(N: integer): string; + +//----------------------------------------------------------------------------- + +/// Возвращает количество английских слов-образцов +function EnWordCount: integer; //116 + +/// Возвращает количество английских предложений-образцов +function EnSentenceCount: integer; //61 + +/// Возвращает количество английских текстов-образцов +function EnTextCount: integer; //85 + +/// Возвращает английское слово-образец с номером N (нумерация от 0) +function EnWordSample(N: integer): string; + +/// Возвращает английское предложение-образец с номером N (нумерация от 0) +function EnSentenceSample(N: integer): string; + +/// Возвращает английский текст-образец с номером N (нумерация от 0), +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка +function EnTextSample(N: integer): string; + +//----------------------------------------------------------------------------- + +/// Добавляет строку комментария к текущей группе или подгруппе заданий +procedure CommentText(S: string); + +/// Добавляет комментарий из другой группы заданий (или ее подгруппы, +/// если ее второй параметр не является пустой строкой) +procedure UseComment(GroupName, SubgroupName: string); overload; + +/// Добавляет комментарий из другой группы заданий +procedure UseComment(GroupName: string); overload; + +/// Устанавливает режим добавления комментария к подгруппе заданий +procedure Subgroup(SubgroupName: string); + +//----------------------------------------------------------------------------- + +/// Процедура, обеспечивающая отображение динамических структур данных +/// в "объектном стиле" при выполнении заданий в среде PascalABC.NET +/// (при использовании других сред не выполняет никаких действий) +procedure SetObjectStyle; + +//----------------------------------------------------------------------------- + +/// Процедура для внутреннего использования; она должна быть вызвана +/// из процедуры с именем activate (с маленькой буквы) в любой +/// библиотеке NET с группой заданий (процедура activate имеет +/// тот же строковый параметр S, что и процедура ActivateNET) +procedure ActivateNET(S: string); + +//----------------------------------------------------------------------------- + +/// Устанавливает текущий процесс для последующей передачи ему данных +/// числовых типов (при выполнении задания в параллельном режиме) +procedure SetProcess(ProcessRank: integer); + +//----------------------------------------------------------------------------- + +implementation + +uses System.Runtime.InteropServices, System.Text; + +function LoadLibrary(FileName: string): integer; + external 'kernel32.dll' Name 'LoadLibrary'; + +function GetProcAddress(handle: integer; ProcName: string): System.IntPtr; + external 'kernel32.dll' Name 'GetProcAddress'; + +function FreeLibrary(handle: integer): boolean; + external 'kernel32.dll' Name 'FreeLibrary'; + +function MessageBox(hWnd: integer; lpText, lpCaption: string; uType: integer): Integer; + external 'user32.dll' Name 'MessageBoxA'; + +type TTaskText = procedure (s: string); + TCreateGroup = procedure (GroupName: string; InitTaskProc: TInitTaskProc); + +type + TNFunc = function : integer; + TNFuncN4 = function (N1, N2, N3, N4: integer): integer; + TProcSb = procedure (S: StringBuilder); + TProcNSb = procedure (N: integer; S: StringBuilder); + TProc = procedure; + TProcS = procedure (S: array of byte); + TProcSCN2 = procedure (S: array of byte; C: Char; N1, N2: integer); + TProcSN = procedure (S: array of byte; N: integer); + TProcSN2 = procedure (S: array of byte; N1, N2: integer); + TProcSN3 = procedure (S: array of byte; N1, N2, N3: integer); + TProcSN4 = procedure (S: array of byte; N1, N2, N3, N4: integer); + TProcSN5 = procedure (S: array of byte; N1, N2, N3, N4, N5: integer); + TProcSN6 = procedure (S: array of byte; N1, N2, N3, N4, N5, N6: integer); + TProcSRN3 = procedure (S: array of byte; R: real; N1, N2, N3: integer); + TProcSR2N3 = procedure (S: array of byte; R1, R2: real; N1, N2, N3: integer); + TProcSR3N3 = procedure (S: array of byte; R1, R2, R3: real; N1, N2, N3: integer); + TProcS2 = procedure (S1, S2: array of byte); + TProcS2N2 = procedure (S1, S2: array of byte; N1, N2: integer); + TProcS4NP = procedure (S1, S2, S3, S4: array of byte; N: integer; P: TInitTaskProc); + TProcN = procedure (N: integer); + TProcNP = procedure (N: integer; P: pointer); + TProcN3 = procedure (N1, N2, N3: integer); + TProcN4 = procedure (N1, N2, N3, N4: integer); + TProcSvN = procedure (S: array of byte; var N: integer); + TProcSNS = procedure (S1: array of byte; N: integer; S2: array of byte); + +var + creategroup_: TProcS4NP; + usetask_: TProcSN; + createtask_: TProcS; + currentlanguage_: TNFunc; + currentlocale_: TProcSb; + tasktext_: TProcSN2; + datab_, resultb_: TProcSN3; + datan_, resultn_: TProcSN4; + datan2_, resultn2_: TProcSN5; + datan3_, resultn3_: TProcSN6; + datar_, resultr_: TProcSRN3; + datar2_, resultr2_: TProcSR2N3; + datar3_, resultr3_: TProcSR3N3; + datac_, resultc_: TProcSCN2; + datas_, results_: TProcS2N2; + datap_, resultp_: TProcSN3; + datacomment_, resultcomment_: TProcSN2; + setprecision_, settestcount_, setrequireddatacount_: TProcN; + center_: TNFuncN4; + datafilen_, datafiler_, datafilec_, datafiles_, datafilet_: TProcSN2; + resultfilen_, resultfiler_, resultfilec_, resultfiles_, resultfilet_: TProcSN2; + setpointer_: TProcNP; + datalist_, resultlist_: TProcN3; + databintree_, datatree_, resultbintree_, resulttree_: TProcN4; + showpointer_, setnewnode_, setdisposednode_: TProcN; + wordcount_, sentencecount_, textcount_: TNFunc; + enwordcount_, ensentencecount_, entextcount_: TNFunc; + wordsample_, sentencesample_, textsample_: TProcNSb; + enwordsample_, ensentencesample_, entextsample_: TProcNSb; + commenttext_: TProcS; + usecomment_: TProcS2; + subgroup_{, registergroup_}: TProcS; // удалено в версии 4.11 + setobjectstyle_: TProc; + createtask2_: TProcSvN; + setprocess_: TProcN; + currentversion_: TProcSb; // добавлено в версии 4.10 + currenttest_: TNFunc; // добавлено в версии 4.11 + usetaskex_: TProcSNS; // добавлено в версии 4.19 + + FHandle: integer; + +function ToBytes(s: string): array of byte; +begin + var utf8 := Encoding.Unicode; + var ansi := Encoding.GetEncoding(1251); + result := Encoding.Convert(utf8, ansi, utf8.GetBytes(S)); +end; + +procedure ActivateNET(S: string); +begin + FHandle := LoadLibrary(S); + creategroup_ := TProcS4NP(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'creategroup'), typeof(TProcS4NP))); + usetask_ := TProcSN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'usetask'), typeof(TProcSN))); + createtask_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'createtask'), typeof(TProcS))); + currentlanguage_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentlanguage'), typeof(TNFunc))); + currentlocale_ := TProcSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentlocale2'), typeof(TProcSb))); + tasktext_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'tasktext'), typeof(TProcSN2))); + datab_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datab'), typeof(TProcSN3))); + datan_ := TProcSN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datan'), typeof(TProcSN4))); + datan2_ := TProcSN5(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datan2'), typeof(TProcSN5))); + datan3_ := TProcSN6(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datan3'), typeof(TProcSN6))); + datar_ := TProcSRN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datar'), typeof(TProcSRN3))); + datar2_ := TProcSR2N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datar2'), typeof(TProcSR2N3))); + datar3_ := TProcSR3N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datar3'), typeof(TProcSR3N3))); + datac_ := TProcSCN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datac'), typeof(TProcSCN2))); + datas_ := TProcS2N2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datas'), typeof(TProcS2N2))); + datap_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datap'), typeof(TProcSN3))); + datacomment_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datacomment'), typeof(TProcSN2))); + resultb_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultb'), typeof(TProcSN3))); + resultn_ := TProcSN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultn'), typeof(TProcSN4))); + resultn2_ := TProcSN5(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultn2'), typeof(TProcSN5))); + resultn3_ := TProcSN6(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultn3'), typeof(TProcSN6))); + resultr_ := TProcSRN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultr'), typeof(TProcSRN3))); + resultr2_ := TProcSR2N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultr2'), typeof(TProcSR2N3))); + resultr3_ := TProcSR3N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultr3'), typeof(TProcSR3N3))); + resultc_ := TProcSCN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultc'), typeof(TProcSCN2))); + results_ := TProcS2N2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'results'), typeof(TProcS2N2))); + resultp_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultp'), typeof(TProcSN3))); + resultcomment_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultcomment'), typeof(TProcSN2))); + setprecision_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setprecision'), typeof(TProcN))); + settestcount_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'settestcount'), typeof(TProcN))); + setrequireddatacount_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setrequireddatacount'), typeof(TProcN))); + center_ := TNFuncN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'center'), typeof(TNFuncN4))); + datafilen_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafilen'), typeof(TProcSN2))); + datafiler_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafiler'), typeof(TProcSN2))); + datafilec_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafilec'), typeof(TProcSN2))); + datafiles_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafiles'), typeof(TProcSN2))); + datafilet_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafilet'), typeof(TProcSN2))); + resultfilen_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfilen'), typeof(TProcSN2))); + resultfiler_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfiler'), typeof(TProcSN2))); + resultfilec_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfilec'), typeof(TProcSN2))); + resultfiles_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfiles'), typeof(TProcSN2))); + resultfilet_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfilet'), typeof(TProcSN2))); + setpointer_ := TProcNP(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setpointer'), typeof(TProcNP))); + datalist_ := TProcN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datalist'), typeof(TProcN3))); + resultlist_ := TProcN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultlist'), typeof(TProcN3))); + databintree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'databintree'), typeof(TProcN4))); + datatree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datatree'), typeof(TProcN4))); + resultbintree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultbintree'), typeof(TProcN4))); + resulttree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resulttree'), typeof(TProcN4))); + showpointer_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'showpointer'), typeof(TProcN))); + setnewnode_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setnewnode'), typeof(TProcN))); + setdisposednode_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setdisposednode'), typeof(TProcN))); + wordcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'wordcount'), typeof(TNFunc))); + sentencecount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'sentencecount'), typeof(TNFunc))); + textcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'textcount'), typeof(TNFunc))); + wordsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'wordsample2'), typeof(TProcNSb))); + sentencesample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'sentencesample2'), typeof(TProcNSb))); + textsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'textsample2'), typeof(TProcNSb))); + enwordcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'enwordcount'), typeof(TNFunc))); + ensentencecount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'ensentencecount'), typeof(TNFunc))); + entextcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'entextcount'), typeof(TNFunc))); + enwordsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'enwordsample2'), typeof(TProcNSb))); + ensentencesample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'ensentencesample2'), typeof(TProcNSb))); + entextsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'entextsample2'), typeof(TProcNSb))); + commenttext_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'commenttext'), typeof(TProcS))); + usecomment_ := TProcS2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'usecomment'), typeof(TProcS2))); + subgroup_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'subgroup'), typeof(TProcS))); +// registergroup_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'registergroup'), typeof(TProcS))); + setobjectstyle_ := TProc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setobjectstyle'), typeof(TProc))); + createtask2_ := TProcSvN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'createtask2'), typeof(TProcSvN))); + setprocess_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setprocess'), typeof(TProcN))); + currentversion_ := TProcSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentversion2'), typeof(TProcSb))); // добавлено в версии 4.10 + currenttest_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'curt'), typeof(TNFunc))); // добавлено в версии 4.11 + usetaskex_ := TProcSNS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'usetaskex'), typeof(TProcSNS))); // добавлено в версии 4.19 + +end; + +//============================================================================= + +var p: TInitTaskProc := nil; + +procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string; + TaskCount: integer; InitTaskProc: TInitTaskProc); +begin + p := InitTaskProc; + creategroup_(ToBytes(GroupName), ToBytes(GroupDescription), ToBytes(GroupAuthor), + ToBytes(GroupKey), TaskCount, p); +end; + +procedure UseTask(GroupName: string; TaskNumber: integer); +begin + usetask_(ToBytes(GroupName), TaskNumber); +end; + +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + if usetaskex_ <> nil then + usetaskex_(ToBytes(GroupName), TaskNumber, ToBytes(TopicDescription)) + else + usetask_(ToBytes(GroupName), TaskNumber); +end; + +procedure CreateTask(SubgroupName: string); +begin + createtask_(ToBytes(SubgroupName)); +end; + +procedure CreateTask; +begin + CreateTask(''); +end; + + + + + + + + + + +function CurrentLanguage: integer; +begin + result := currentlanguage_; +end; + +function CurrentLocale: string; +begin + var S := new StringBuilder(100); + currentlocale_(S); + result := S.ToString; +end; + +procedure TaskText(S: string; X, Y: integer); +begin + tasktext_(ToBytes(S), X, Y); +end; + +procedure TaskText(S: string); +var + p1, p2: array[1..205] of integer; + n, i, k, l: integer; + m: set of char; +begin + n := 0; + m := [#13, #10]; + l := Length(S); + i := 1; + while i <= l do + begin + if not (S[i] in m) and ((i = 1) or (S[i-1] in m)) + and (n < 205) then + begin + while (i <= l) and (S[i] = ' ') do + Inc(i); + if (i <= l) and not (S[i] in m) then + begin + Inc(n); + p1[n] := i; + end; + end; + if i > l then break; + if not (S[i] in m) and ((i = l) or (S[i+1] in m)) then + begin + k := i; + if S[k] = ' ' then + begin + while S[k] = ' ' do + Dec(k); + if (S[k] = '\') and ((k = 1) or (S[k-1] <> '\')) then + Inc(k); + end; + p2[n] := k - p1[n] + 1; + if n = 205 then break; + end; + Inc(i); + end; + case n of + 0: ; + 1: tasktext(Copy(S, p1[1], p2[1]), 0, 3); + 2: for i := 1 to n do + tasktext(Copy(S, p1[i], p2[i]), 0, 2*i); + 3, 4: + for i := 1 to n do + tasktext(Copy(S, p1[i], p2[i]), 0, i+1); + else + begin + for i := 1 to 5 do + tasktext(Copy(S, p1[i], p2[i]), 0, i); + for i := 6 to n do + tasktext(Copy(S, p1[i], p2[i]), 0, 0); + end; + end; +end; + +function BtoN(B: boolean): integer; +begin + if B then + result := 1 + else + result := 0; +end; + +procedure DataB (Cmt: string; B: boolean; X, Y: integer); +begin + datab_(ToBytes(Cmt), BtoN(B), X, Y); +end; + +procedure DataB (B: boolean; X, Y: integer); +begin + datab_(ToBytes(''), BtoN(B), X, Y); +end; + +procedure DataN (Cmt: string; N: integer; X, Y, W: integer); +begin + datan_(ToBytes(Cmt), N, X, Y, W); +end; + +procedure DataN (N: integer; X, Y, W: integer); +begin + datan_(ToBytes(''), N, X, Y, W); +end; + +procedure DataN2(Cmt: string; N1, N2: integer; X, Y, W: integer); +begin + datan2_(ToBytes(Cmt), N1, N2, X, Y, W); +end; + +procedure DataN2(N1, N2: integer; X, Y, W: integer); +begin + datan2_(ToBytes(''), N1, N2, X, Y, W); +end; + +procedure DataN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); +begin + datan3_(ToBytes(Cmt), N1, N2, N3, X, Y, W); +end; + +procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); +begin + datan3_(ToBytes(''), N1, N2, N3, X, Y, W); +end; + +procedure DataR(Cmt: string; R: real; X, Y, W: integer); +begin + datar_(ToBytes(Cmt), R, X, Y, W); +end; + +procedure DataR(R: real; X, Y, W: integer); +begin + datar_(ToBytes(''), R, X, Y, W); +end; + +procedure DataR2(Cmt: string; R1, R2: real; X, Y, W: integer); +begin + datar2_(ToBytes(Cmt), R1, R2, X, Y, W); +end; + +procedure DataR2(R1, R2: real; X, Y, W: integer); +begin + datar2_(ToBytes(''), R1, R2, X, Y, W); +end; + +procedure DataR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); +begin + datar3_(ToBytes(Cmt), R1, R2, R3, X, Y, W); +end; + +procedure DataR3(R1, R2, R3: real; X, Y, W: integer); +begin + datar3_(ToBytes(''), R1, R2, R3, X, Y, W); +end; + +procedure DataC(Cmt: string; C: char; X, Y: integer); +begin + datac_(ToBytes(Cmt), C, X, Y); +end; + +procedure DataC(C: char; X, Y: integer); +begin + datac_(ToBytes(''), C, X, Y); +end; + +procedure DataS(Cmt: string; S: string; X, Y: integer); +begin + datas_(ToBytes(Cmt), ToBytes(S), X, Y); +end; + +procedure DataS(S: string; X, Y: integer); +begin + datas_(ToBytes(''), ToBytes(S), X, Y); +end; + +procedure DataP(Cmt: string; NP: integer; X, Y: integer); +begin + datap_ (ToBytes(Cmt), NP, X, Y); +end; + +procedure DataP(NP: integer; X, Y: integer); +begin + datap_ (ToBytes(''), NP, X, Y); +end; + +procedure DataComment(Cmt: string; X, Y: integer); +begin + datacomment_(ToBytes(Cmt), X, Y); +end; + +procedure ResultB(Cmt: string; B: boolean; X, Y: integer); +begin + resultb_(ToBytes(Cmt), BtoN(B), X, Y); +end; + +procedure ResultB(B: boolean; X, Y: integer); +begin + resultb_(ToBytes(''), BtoN(B), X, Y); +end; + +procedure ResultN(Cmt: string; N: integer; X, Y, W: integer); +begin + resultn_(ToBytes(Cmt), N, X, Y, W); +end; + +procedure ResultN(N: integer; X, Y, W: integer); +begin + resultn_(ToBytes(''), N, X, Y, W); +end; + +procedure ResultN2(Cmt: string; N1, N2: integer; X, Y, W: integer); +begin + resultn2_(ToBytes(Cmt), N1, N2, X, Y, W); +end; + +procedure ResultN2(N1, N2: integer; X, Y, W: integer); +begin + resultn2_(ToBytes(''), N1, N2, X, Y, W); +end; + +procedure ResultN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); +begin + resultn3_(ToBytes(Cmt), N1, N2, N3, X, Y, W); +end; + +procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); +begin + resultn3_(ToBytes(''), N1, N2, N3, X, Y, W); +end; + +procedure ResultR(Cmt: string; R: real; X, Y, W: integer); +begin + resultr_(ToBytes(Cmt), R, X, Y, W); +end; + +procedure ResultR(R: real; X, Y, W: integer); +begin + resultr_(ToBytes(''), R, X, Y, W); +end; + +procedure ResultR2(Cmt: string; R1, R2: real; X, Y, W: integer); +begin + resultr2_(ToBytes(Cmt), R1, R2, X, Y, W); +end; + +procedure ResultR2(R1, R2: real; X, Y, W: integer); +begin + resultr2_(ToBytes(''), R1, R2, X, Y, W); +end; + +procedure ResultR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); +begin + resultr3_(ToBytes(Cmt), R1, R2, R3, X, Y, W); +end; + +procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); +begin + resultr3_(ToBytes(''), R1, R2, R3, X, Y, W); +end; + +procedure ResultC(Cmt: string; C: char; X, Y: integer); +begin + resultc_(ToBytes(Cmt), C, X, Y); +end; + +procedure ResultC(C: char; X, Y: integer); +begin + resultc_(ToBytes(''), C, X, Y); +end; + +procedure ResultS(Cmt: string; S: string; X, Y: integer); +begin + results_(ToBytes(Cmt), ToBytes(S), X, Y); +end; + +procedure ResultS(S: string; X, Y: integer); +begin + results_(ToBytes(''), ToBytes(S), X, Y); +end; + +procedure ResultP(Cmt: string; NP: integer; X, Y: integer); +begin + resultp_(ToBytes(Cmt), NP, X, Y); +end; + +procedure ResultP(NP: integer; X, Y: integer); +begin + resultp_(ToBytes(''), NP, X, Y); +end; + +procedure ResultComment(Cmt: string; X, Y: integer); +begin + resultcomment_(ToBytes(Cmt), X, Y); +end; + +procedure SetPrecision(N: integer); +begin + setprecision_(N); +end; + +procedure SetTestCount(N: integer); +begin + settestcount_(N); +end; + +procedure SetRequiredDataCount(N: integer); +begin + setrequireddatacount_(N); +end; + +function Center(I, N, W, B: integer): integer; +begin + result := center_(I, N, W, B); +end; + +procedure DataFileN(FileName: string; Y, W: integer); +begin + datafilen_(ToBytes(FileName), Y, W); +end; + +procedure DataFileR(FileName: string; Y, W: integer); +begin + datafiler_(ToBytes(FileName), Y, W); +end; + +procedure DataFileC(FileName: string; Y, W: integer); +begin + datafilec_(ToBytes(FileName), Y, W); +end; + +procedure DataFileS(FileName: string; Y, W: integer); +begin + datafiles_(ToBytes(FileName), Y, W); +end; + +procedure DataFileT(FileName: string; Y1, Y2: integer); +begin + datafilet_(ToBytes(FileName), Y1, Y2); +end; + +procedure ResultFileN(FileName: string; Y, W: integer); +begin + resultfilen_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileR(FileName: string; Y, W: integer); +begin + resultfiler_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileC(FileName: string; Y, W: integer); +begin + resultfilec_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileS(FileName: string; Y, W: integer); +begin + resultfiles_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileT(FileName: string; Y1, Y2: integer); +begin + resultfilet_(ToBytes(FileName), Y1, Y2); +end; + +procedure SetPointer(NP: integer; P: PNode); +begin + setpointer_(NP, P); +end; + +procedure DataList(NP: integer; X, Y: integer); +begin + datalist_(NP, X, Y); +end; + +procedure ResultList(NP: integer; X, Y: integer); +begin + resultlist_(NP, X, Y); +end; + +procedure DataBinTree(NP: integer; X, Y1, Y2: integer); +begin + databintree_(NP, X, Y1, Y2); +end; + +procedure ResultBinTree(NP: integer; X, Y1, Y2: integer); +begin + resultbintree_(NP, X, Y1, Y2); +end; + +procedure DataTree(NP: integer; X, Y1, Y2: integer); +begin + datatree_(NP, X, Y1, Y2); +end; + +procedure ResultTree(NP: integer; X, Y1, Y2: integer); +begin + resulttree_(NP, X, Y1, Y2); +end; + +procedure ShowPointer(NP: integer); +begin + showpointer_(NP); +end; + +procedure SetNewNode(NNode: integer); +begin + setnewnode_(NNode); +end; + +procedure SetDisposedNode(NNode: integer); +begin + setdisposednode_(NNode); +end; + +function WordCount: integer; +begin + result := wordcount_; +end; + +function SentenceCount: integer; +begin + result := sentencecount_; +end; + +function TextCount: integer; +begin + result := textcount_; +end; + +function WordSample(n: integer): string; +begin + var S := new StringBuilder(20); //max=11 + wordsample_(n, S); + result := S.ToString; +end; + +function SentenceSample(n: integer): string; +begin + var S := new StringBuilder(100); //max=76 + sentencesample_(n, S); + result := S.ToString; +end; + +function TextSample(n: integer): string; +begin + var S := new StringBuilder(1100); //max=1076 + textsample_(n, S); + result := S.ToString; +end; + +function EnWordCount: integer; +begin + result := enwordcount_; +end; + +function EnSentenceCount: integer; +begin + result := ensentencecount_; +end; + +function EnTextCount: integer; +begin + result := entextcount_; +end; + +function EnWordSample(n: integer): string; +begin + var S := new StringBuilder(20); //max=14 + enwordsample_(n, S); + result := S.ToString; +end; + +function EnSentenceSample(n: integer): string; +begin + var S := new StringBuilder(100); //max=76 + ensentencesample_(n, S); + result := S.ToString; +end; + +function EnTextSample(n: integer): string; +begin + var S := new StringBuilder(1100); //max=1009 + entextsample_(n, S); + result := S.ToString; +end; + +procedure CommentText(S: string); +begin + commenttext_(ToBytes(S)); +end; + +procedure UseComment(GroupName, SubgroupName: string); +begin + usecomment_(ToBytes(GroupName), ToBytes(SubgroupName)); +end; + +procedure UseComment(GroupName: string); +begin + UseComment(GroupName, ''); +end; + +procedure Subgroup(SubgroupName: string); +begin + subgroup_(ToBytes(SubgroupName)); +end; + +procedure SetObjectStyle; +begin + setobjectstyle_; +end; + +{ // удалено в версии 4.11 +procedure RegisterGroup(UnitName: string); +begin + registergroup_(PChar(UnitName)); +end; +} + +procedure ShowError(S1, S2: string); +begin + MessageBox(0, S1+#13#10'is not found '+ + 'in the PT4 library.'#13#10'You should update '+ + 'the Programming Taskbook to '+S2+' version.', + 'PT4TaskMaker Error', 16); +end; + +procedure CreateTask(SubgroupName: string; var ProcessCount: integer); +begin + if createtask2_ <> nil then + createtask2_(ToBytes(SubgroupName), ProcessCount) + else + ShowError('The CreateTask procedure with ProcessCount parameter', '4.9'); +end; + +procedure CreateTask(var ProcessCount: integer); +begin + CreateTask('', ProcessCount); +end; + +procedure SetProcess(ProcessRank: integer); +begin + if setprocess_ <> nil then + setprocess_(ProcessRank); +end; + +function CurrentVersion: string; +begin + result := '4.00'; + if currentversion_ <> nil then + begin + var S := new StringBuilder(100); + currentversion_(S); + result := S.ToString; + end; +end; + +function CurrentTest: integer; +begin + result := 0; + if currenttest_ <> nil then + result := currenttest_; +end; + +function RandomN(M, N: integer): integer; +begin + result := M; + if M < N then + result := Random(N-M+1) + M; +end; + +function RandomR(A, B: real): real; +begin + result := A; + if A < B then + result := Random * (B-A) + A; +end; + +initialization + +finalization + + FreeLibrary(FHandle); + +end. + diff --git a/bin/PT4/Lib/PT-Ext.dll b/bin/PT4/Lib/PT-Ext.dll index 5d0db2dfa..e7c0e67cd 100644 Binary files a/bin/PT4/Lib/PT-Ext.dll and b/bin/PT4/Lib/PT-Ext.dll differ diff --git a/bin/PT4/Lib/PT4AArray.dll b/bin/PT4/Lib/PT4AArray.dll index cbfa80153..84d12ae17 100644 Binary files a/bin/PT4/Lib/PT4AArray.dll and b/bin/PT4/Lib/PT4AArray.dll differ diff --git a/bin/PT4/Lib/PT4ABegin.dll b/bin/PT4/Lib/PT4ABegin.dll index 639b987cf..e54002f1f 100644 Binary files a/bin/PT4/Lib/PT4ABegin.dll and b/bin/PT4/Lib/PT4ABegin.dll differ diff --git a/bin/PT4/Lib/PT4ABoolean.dll b/bin/PT4/Lib/PT4ABoolean.dll index 440eed3dc..846f5ac96 100644 Binary files a/bin/PT4/Lib/PT4ABoolean.dll and b/bin/PT4/Lib/PT4ABoolean.dll differ diff --git a/bin/PT4/Lib/PT4ACase.dll b/bin/PT4/Lib/PT4ACase.dll index fd45101ab..19d511839 100644 Binary files a/bin/PT4/Lib/PT4ACase.dll and b/bin/PT4/Lib/PT4ACase.dll differ diff --git a/bin/PT4/Lib/PT4AExam.dll b/bin/PT4/Lib/PT4AExam.dll index 8ab178c68..2521d4956 100644 Binary files a/bin/PT4/Lib/PT4AExam.dll and b/bin/PT4/Lib/PT4AExam.dll differ diff --git a/bin/PT4/Lib/PT4AFunc.dll b/bin/PT4/Lib/PT4AFunc.dll index 06f25ea2a..366557d1e 100644 Binary files a/bin/PT4/Lib/PT4AFunc.dll and b/bin/PT4/Lib/PT4AFunc.dll differ diff --git a/bin/PT4/Lib/PT4AIf.dll b/bin/PT4/Lib/PT4AIf.dll index c091b87f6..7aa306460 100644 Binary files a/bin/PT4/Lib/PT4AIf.dll and b/bin/PT4/Lib/PT4AIf.dll differ diff --git a/bin/PT4/Lib/PT4AInteger.dll b/bin/PT4/Lib/PT4AInteger.dll index 5d7344fc3..f4df1ee24 100644 Binary files a/bin/PT4/Lib/PT4AInteger.dll and b/bin/PT4/Lib/PT4AInteger.dll differ diff --git a/bin/PT4/Lib/PT4ALoopFor.dll b/bin/PT4/Lib/PT4ALoopFor.dll index b31c0788a..f9580a985 100644 Binary files a/bin/PT4/Lib/PT4ALoopFor.dll and b/bin/PT4/Lib/PT4ALoopFor.dll differ diff --git a/bin/PT4/Lib/PT4AProc.dll b/bin/PT4/Lib/PT4AProc.dll index 66b01e41b..8172c11a5 100644 Binary files a/bin/PT4/Lib/PT4AProc.dll and b/bin/PT4/Lib/PT4AProc.dll differ diff --git a/bin/PT4/Lib/PT4ASeries.dll b/bin/PT4/Lib/PT4ASeries.dll index 0d19cec14..9b287a184 100644 Binary files a/bin/PT4/Lib/PT4ASeries.dll and b/bin/PT4/Lib/PT4ASeries.dll differ diff --git a/bin/PT4/Lib/PT4AWhile.dll b/bin/PT4/Lib/PT4AWhile.dll index 58c55d514..a49aad66d 100644 Binary files a/bin/PT4/Lib/PT4AWhile.dll and b/bin/PT4/Lib/PT4AWhile.dll differ diff --git a/bin/PT4/Lib/PT4ArrFilter.dll b/bin/PT4/Lib/PT4ArrFilter.dll index 6d73b6286..f777df615 100644 Binary files a/bin/PT4/Lib/PT4ArrFilter.dll and b/bin/PT4/Lib/PT4ArrFilter.dll differ diff --git a/bin/PT4/Lib/PT4ArrFind.dll b/bin/PT4/Lib/PT4ArrFind.dll index b85e7793d..51959da89 100644 Binary files a/bin/PT4/Lib/PT4ArrFind.dll and b/bin/PT4/Lib/PT4ArrFind.dll differ diff --git a/bin/PT4/Lib/PT4ArrGen.dll b/bin/PT4/Lib/PT4ArrGen.dll index 6f2579c18..158f13ff8 100644 Binary files a/bin/PT4/Lib/PT4ArrGen.dll and b/bin/PT4/Lib/PT4ArrGen.dll differ diff --git a/bin/PT4/Lib/PT4ArrObj.dll b/bin/PT4/Lib/PT4ArrObj.dll index ccae5eb35..2fe1d4b37 100644 Binary files a/bin/PT4/Lib/PT4ArrObj.dll and b/bin/PT4/Lib/PT4ArrObj.dll differ diff --git a/bin/PT4/Lib/PT4ArrOp.dll b/bin/PT4/Lib/PT4ArrOp.dll index e4dd30ca6..dca6981d9 100644 Binary files a/bin/PT4/Lib/PT4ArrOp.dll and b/bin/PT4/Lib/PT4ArrOp.dll differ diff --git a/bin/PT4/Lib/PT4ArrShift.dll b/bin/PT4/Lib/PT4ArrShift.dll index c1b3d8e4f..d454701a6 100644 Binary files a/bin/PT4/Lib/PT4ArrShift.dll and b/bin/PT4/Lib/PT4ArrShift.dll differ diff --git a/bin/PT4/Lib/PT4ArrSlice.dll b/bin/PT4/Lib/PT4ArrSlice.dll index f9cfa1d25..d89584496 100644 Binary files a/bin/PT4/Lib/PT4ArrSlice.dll and b/bin/PT4/Lib/PT4ArrSlice.dll differ diff --git a/bin/PT4/Lib/PT4ArrTransf.dll b/bin/PT4/Lib/PT4ArrTransf.dll index a62e385cf..3f58778bf 100644 Binary files a/bin/PT4/Lib/PT4ArrTransf.dll and b/bin/PT4/Lib/PT4ArrTransf.dll differ diff --git a/bin/PT4/Lib/PT4ExamBegin_ru.dll b/bin/PT4/Lib/PT4ExamBegin_ru.dll index a0ea6c93a..0d1e317f8 100644 Binary files a/bin/PT4/Lib/PT4ExamBegin_ru.dll and b/bin/PT4/Lib/PT4ExamBegin_ru.dll differ diff --git a/bin/PT4/Lib/PT4ExamCheck_ru.dll b/bin/PT4/Lib/PT4ExamCheck_ru.dll index 7f1f9bd36..0f65f9cc0 100644 Binary files a/bin/PT4/Lib/PT4ExamCheck_ru.dll and b/bin/PT4/Lib/PT4ExamCheck_ru.dll differ diff --git a/bin/PT4/Lib/PT4ExamTaskC_ru.dll b/bin/PT4/Lib/PT4ExamTaskC_ru.dll index 7b0a35f59..c9a7369f8 100644 Binary files a/bin/PT4/Lib/PT4ExamTaskC_ru.dll and b/bin/PT4/Lib/PT4ExamTaskC_ru.dll differ diff --git a/bin/PT4/Lib/PT4LinqBegin.dll b/bin/PT4/Lib/PT4LinqBegin.dll index 98c906b62..1f773a4bd 100644 Binary files a/bin/PT4/Lib/PT4LinqBegin.dll and b/bin/PT4/Lib/PT4LinqBegin.dll differ diff --git a/bin/PT4/Lib/PT4LinqObj.dll b/bin/PT4/Lib/PT4LinqObj.dll index 729f36b1a..735d34623 100644 Binary files a/bin/PT4/Lib/PT4LinqObj.dll and b/bin/PT4/Lib/PT4LinqObj.dll differ diff --git a/bin/PT4/Lib/PT4LinqXml.dll b/bin/PT4/Lib/PT4LinqXml.dll index 58ee09cbe..a1a3f9c7d 100644 Binary files a/bin/PT4/Lib/PT4LinqXml.dll and b/bin/PT4/Lib/PT4LinqXml.dll differ diff --git a/bin/PT4/Lib/PT4ObjArray.dll b/bin/PT4/Lib/PT4ObjArray.dll index b4301f3e5..563dedb03 100644 Binary files a/bin/PT4/Lib/PT4ObjArray.dll and b/bin/PT4/Lib/PT4ObjArray.dll differ diff --git a/bin/PT4/Lib/PT4TMDemoAbc.dll b/bin/PT4/Lib/PT4TMDemoAbc.dll index 123bb7935..2d5bdab51 100644 Binary files a/bin/PT4/Lib/PT4TMDemoAbc.dll and b/bin/PT4/Lib/PT4TMDemoAbc.dll differ diff --git a/bin/PT4/Lib/PT4ZArray.dll b/bin/PT4/Lib/PT4ZArray.dll index 755b555e7..9bbde6784 100644 Binary files a/bin/PT4/Lib/PT4ZArray.dll and b/bin/PT4/Lib/PT4ZArray.dll differ diff --git a/bin/PT4/Lib/PT4ZMatrix.dll b/bin/PT4/Lib/PT4ZMatrix.dll index 709d15fb2..b908bbf67 100644 Binary files a/bin/PT4/Lib/PT4ZMatrix.dll and b/bin/PT4/Lib/PT4ZMatrix.dll differ diff --git a/bin/PT4/Lib/PT4ZMinmax.dll b/bin/PT4/Lib/PT4ZMinmax.dll index 62ab2fd52..ccc93eb60 100644 Binary files a/bin/PT4/Lib/PT4ZMinmax.dll and b/bin/PT4/Lib/PT4ZMinmax.dll differ diff --git a/bin/PT4/Lib/PT4ZSeries.dll b/bin/PT4/Lib/PT4ZSeries.dll index c27456e83..5f9df74e7 100644 Binary files a/bin/PT4/Lib/PT4ZSeries.dll and b/bin/PT4/Lib/PT4ZSeries.dll differ diff --git a/bin/PT4/PT4Setup.exe b/bin/PT4/PT4Setup.exe index a73d0a28d..88d956600 100644 Binary files a/bin/PT4/PT4Setup.exe and b/bin/PT4/PT4Setup.exe differ diff --git a/bin/PT4/PT4Tasks.css b/bin/PT4/PT4Tasks.css index 163aa44a1..3c17b57da 100644 --- a/bin/PT4/PT4Tasks.css +++ b/bin/PT4/PT4Tasks.css @@ -18,6 +18,6 @@ P.ptCommentQuote{text-align:left;margin-left:120px;margin-top:0px;margin-bottom: P.ptCommentContinue{text-align:justify;} P.ptFooter{text-align:right;font-size:10pt;font-style:italic;margin-right:0px;} SPAN.ptSpecial{font-family:"Arial";} -PRE{font-family:"Courier New";text-align:left;font-size:10pt;text-indent:0px;margin-top:5px; margin-right:10px; margin-bottom:0px; margin-left:60px;} +PRE{text-align:left;font-size:10pt;text-indent:0px;margin-top:5px; margin-right:10px; margin-bottom:0px; margin-left:60px;} CODE{font-size:10pt;} P.ptPicture{font-family:Arial, sans-serif;margin-top: 5px;margin-bottom: 5px;margin-left: 60px;font-size: small;color: #000080;text-indent: 0pt;text-align: justify} diff --git a/bin/PT4/Results.abc b/bin/PT4/Results.abc index 265d6fe1e..2a35e9604 100644 --- a/bin/PT4/Results.abc +++ b/bin/PT4/Results.abc @@ -1 +1 @@ -N祭|10PABC2 NC:\Program Files (x86)\PascalABC.NET\PT4 NV8˜#"%'%&&*&$#"%'%&&*&6b3:'%&&*&$#"%'%8>>674;7?;;;B;88;=@78=>;9;:;8>87@< \ No newline at end of file diff --git a/bin/PT4/license-en.txt b/bin/PT4/license-en.txt index c45257548..3b3a22f91 100644 --- a/bin/PT4/license-en.txt +++ b/bin/PT4/license-en.txt @@ -1,6 +1,6 @@ PROGRAMMING TASKBOOK FOR PASCALABC.NET - Copyright (c) M. Abramyan, 1998-2018 + Copyright (c) M. Abramyan, 1998-2023 LICENSE FOR USE AND DISTRIBUTION diff --git a/bin/PT4/license-ru.txt b/bin/PT4/license-ru.txt index cd6039036..d370b1029 100644 --- a/bin/PT4/license-ru.txt +++ b/bin/PT4/license-ru.txt @@ -3,7 +3,7 @@ PROGRAMMING TASKBOOK FOR PASCALABC.NET ( PascalABC.NET) - Copyright (c) . . , 1998-2018 + Copyright (c) . . , 1998-2023 diff --git a/bin/PT4/loaddat.txt b/bin/PT4/loaddat.txt index 45d906518..059c79b4b 100644 --- a/bin/PT4/loaddat.txt +++ b/bin/PT4/loaddat.txt @@ -22,6 +22,7 @@ ArrSlice ArrShift ArrObj ObjArray +ZFunc ZSeries ZMinmax ZArray diff --git a/bin/PT4/loadpabc.dat b/bin/PT4/loadpabc.dat index dfd01b9fd..f3483920d 100644 --- a/bin/PT4/loadpabc.dat +++ b/bin/PT4/loadpabc.dat @@ -12,7 +12,6 @@ loadver=4 ==cc| |19 ==mix| |10 ==p| |10 -==ps| |10 ==pp| |8 =DM| ||%f.pas|uses Drawman;%#%#begin%# Task('%t%n');%#%#end. ==a| |6 diff --git a/bin/PT4/pt4pabc.dll b/bin/PT4/pt4pabc.dll index e956cfce6..e9f3fdce5 100644 Binary files a/bin/PT4/pt4pabc.dll and b/bin/PT4/pt4pabc.dll differ diff --git a/bin/PT4/pt4pabc2.dll b/bin/PT4/pt4pabc2.dll new file mode 100644 index 000000000..4e05cf54f Binary files /dev/null and b/bin/PT4/pt4pabc2.dll differ diff --git a/bin/PT4/xpt4pabc2.dll b/bin/PT4/xpt4pabc2.dll new file mode 100644 index 000000000..f706b93c3 Binary files /dev/null and b/bin/PT4/xpt4pabc2.dll differ