diff --git a/PABCNetHelp/.gitattributes b/PABCNetHelp/.gitattributes new file mode 100644 index 000000000..885058cc7 --- /dev/null +++ b/PABCNetHelp/.gitattributes @@ -0,0 +1,5 @@ +*.html text working-tree-encoding=CP1251 + +*.hhp text working-tree-encoding=CP1251 +*.hhk text working-tree-encoding=CP1251 +*.hhc text working-tree-encoding=CP1251 \ No newline at end of file diff --git a/PABCNetHelp/Common/AdvantagePABC.html b/PABCNetHelp/Common/AdvantagePABC.html index b231ea845..6e782e3fe 100644 --- a/PABCNetHelp/Common/AdvantagePABC.html +++ b/PABCNetHelp/Common/AdvantagePABC.html @@ -7,78 +7,78 @@ -

PascalABC.NET

-

Object Pascal

-

PascalABC.NET -, Delphi. , - . PascalABC.NET - , - , - , -.

-

, PascalABC.NET , - .NET: , , , -, , , (generics), -, -.

-

PABCSystem, , - , - .

-

PascalABC.NET .NET- -, . - PascalABC.NET , -Web, XML-, . 

-

PascalABC.NET - , - - . - - , - - .

-

, - PascalABC.NET - ( - ), - - .

-

-

PascalABC.NET - . - , - , Intellisense ( , -, ), -, , .

-

PascalABC.NET , - RAD (Rapid -Application Development - ).

-

, -PascalABC.NET - . - " - -".

-

PascalABC.NET - : -, - , - -, . - - .

-

PascalABC.NET - , - , .

-

-

Microsoft.NET PascalABC.NET - , - : . -PascalABC.NET - .

-

, PascalABC.NET, - .

-

- , - .

-

, PascalABC.NET - Programming -Taskbook ( ..), - . , - , .

-

GraphWPF -WPFObjects - Graph3D . - , .

+

Преимущества PascalABC.NET

+

Современный язык программирования Object Pascal

+

Язык PascalABC.NET включает в себя практически весь стандартный язык +Паскаль, а также большинство языковых расширений языка Delphi. Однако, этих +средств недостаточно для современного программирования. Именно поэтому PascalABC.NET +расширен рядом конструкций, а его стандартный модуль - рядом подпрограмм, типов +и классов, что позволяет создавать легко читающиеся приложения средней +сложности.

+

Кроме этого, язык PascalABC.NET использует большинство средств, +предоставляемых платформой .NET: единая система типов, классы, интерфейсы, +исключения, делегаты, перегрузка операций, обобщенные типы (generics), методы +расширения, лямбда-выражения.

+

Стандартный модуль PABCSystem, автоматически подключаемый к любой программе, +содержит огромное количество стандартных типов и подпрограмм, позволяющих писать +ясные и компактные программы.

+

В распоряжении PascalABC.NET находятся все средства .NET-библиотек +классов, постоянно расширяющихся самыми современными возможностями. Это +позволяет легко писать на PascalABC.NET приложения для работы с сетью, +Web, XML-документами, использовать регулярные выражения и многое другое. 

+

Язык PascalABC.NET позволяет программировать в классическом +процедурном стиле, в объектно-ориентированном стиле и содержит +множество элементов для программирования в функциональном стиле. Выбор +стиля или комбинации этих стилей - дело вкуса программиста, а при использовании +в обучении - методический подход преподавателя.

+

Сочетание богатых и современных языковых средств, возможностей выбора разных +траекторий обучения позволяет рекомендовать PascalABC.NET с +одной стороны как язык для обучения программированию (от школьников до студентов +младших и средних курсов), с другой - как язык для создания проектов и библиотек +средней сложности.

+

Простая и мощная среда разработки

+

Интегрированная среда разработки PascalABC.NET ориентирована +на создание проектов малой и средней сложности. Она достаточно легковесна и в то +же время обеспечивает разработчика всеми необходимыми средствами, такими как +встроенный отладчик, средства Intellisense (подсказка по точке, подсказка по +параметрам, всплывающая подсказка по имени), переход к определению и реализации +подпрограммы, шаблоны кода, автоформатирование кода.

+

В среду PascalABC.NET встроен также дизайнер форм, +позволяющий создавать полноценные оконные приложения в стиле RAD (Rapid +Application Development - быстрое создание приложений).

+

В отличие от многих профессиональных сред, среда разработки +PascalABC.NET не имеет громоздкого интерфейса и не создает множество +дополнительных вспомогательных файлов на диске при компиляции программы. Для +небольших программ это позволяет соблюсти принцип "Одна программа - один файл на +диске".

+

В среде PascalABC.NET +большое внимание уделено связи запущенной программы с оболочкой: консольная +программа, запущенная из-под оболочки, осуществляет ввод-вывод в специальное +окно, встроенное в оболочку. Можно также запустить несколько программ +одновременно - все они будут контролироваться оболочкой.

+

Интегрированная среда PascalABC.NET +позволяет переключать в настройках русский и английский язык, при этом +локализованы не только элементы интерфейса, но и сообщения об ошибках.

+

Специализированные модули для обучения

+

Платформа Microsoft.NET обеспечивает PascalABC.NET +стандартной библиотекой, состоящей из огромного количества класссов для решения +практически любых задач: от алгоритмических до прикладных. Именно поэтому в +PascalABC.NET отсутствует необходимость в разработке большого +числа собственных модулей.

+

Собственные модули, которые имеются в PascalABC.NET, +ориентированы именно на начальное обучение программированию.

+

Для обучения программированию школьников реализованы модули классических +школьных исполнителей Робот и Чертежник, содержащие около двухсот автоматически +проверяемых заданий на основные конструкции языка программирования.

+

Кроме этого, среда PascalABC.NET +содержит модуль электронного задачника Programming +Taskbook (автор Абрамян М.Э.), позволяющий осуществлять +автоматическую постановку и проверку заданий. Имеются также модули для преподавателя, позволяющие создавать +задания для исполнителей Робот, Чертежник и электронного задачника.

+

Модуль растровой графики GraphWPF и модуль векторных графических объектов +WPFObjects и модуль трёхмерной +графики Graph3D могут быть использованы для создания простейших графических. а также +интерактивных анимационных приложений, управляемых событиями.

diff --git a/PABCNetHelp/Common/Net.html b/PABCNetHelp/Common/Net.html index fea5f76ee..e7a9db332 100644 --- a/PABCNetHelp/Common/Net.html +++ b/PABCNetHelp/Common/Net.html @@ -7,118 +7,118 @@ -

.NET

-

Microsoft .NET - -, - , .NET. -.NET- , - . Microsoft -.NET, -. 2019 . +

Что такое .NET

+

Платформа Microsoft .NET - это комплекс +программ, устанавливаемый поверх операционной системы и обеспечивающий +выполнение программ, написанных специально для .NET. +.NET-программы компактны, пользуются единым набором типов +данных и библиотек. Компания Microsoft активно развивает платформу +.NET, выпуская новые версии с расширенными +возможностями. На момент начала 2019 г. последней версией является .NET 4.7.1.

-

.NET- , - -, ( -.NET IL- - . Intermediate Language - ). - - . -, IL-, - , . - , JIT- -(Just In Time - ), - .NET- - ( -), - . , - .

-

, - . -, JIT- - , , - . , - . -, -IL- - , , - - . - newobj - , callvirt - throw .

-

.NET - - exe - dll. IL-, - . , - , - .

-

"" .NET- -C#: .NET - . .NET- - , (CTS -- Common Type System - ). - (, , ) - .NET-. -, , dll - C#, , - PascalABC.NET, - . PascalABC.NET, - Visual Basic.NET. -, - dll , -, .

-

, -.NET, - - , - - , . , , -, .

-

, - IL- -(, ILSpy).

-

JIT-, - .NET (FCL -- Foundation Class Library - ). - - , , , XML, -, , . .NET- - .

-

-Microsoft.NET - -Mono, - .NET- Linux.

-

.NET.

-

.NET

+

В результате компиляции .NET-программы генерируется не машинный код, а +так называемый байт-код, содержащий команды виртуальной машины (в +.NET он называется IL-кодом +от англ. Intermediate Language - промежуточный язык). Команды байт-кода не зависят +от процессора и используемой операционной системы. При запуске +программа, содержащая IL-код, +подается на вход виртуальной машины, которая и производит выполнение программы. +Часть виртуальной машины, называемая JIT-компилятором +(Just In Time - непосредственно в данный момент), +сразу после запуска .NET-программы переводит +ее промежуточный код в машинный (проводя при этом его +оптимизацию), после чего запускает программу +на исполнение. Если быть точными, то промежуточный код переводится в машинный +частями по мере выполнения программы.

+

Такой способ двойной компиляции сложнее обычного, но имеет +ряд преимуществ. Во-первых, JIT-компилятор может +определить тип процессора, установленного на данном компьютере, поэтому +генерирует максимально эффективный машинный код. Тесты показывают, что за счет +этого некоторые программы выполняются даже быстрее обычных. Во-вторых, +IL-код - гораздо более высокоуровневый, чем машинный, и содержит +ряд объектно-ориентированных команд. В их числе - команда newobj +вызова конструктора объекта, команда callvirt +вызова виртуального метода объекта и команда throw генерации исключения.

+

Программа или библиотека для .NET +называется сборкой и имеет традиционное расширение - exe +или dll. Поскольку в сборках содержится IL-код, +они значительно компактнее обычных программ и библиотек. Так, приложение с +главным окном, меню и элементами управления занимает на диске всего несколько +десятков килобайт.

+

Наиболее "чистым" .NET-языком является +C#: он создавался специально для платформы .NET +и включает практически все ее возможности. .NET-языки легко взаимодействуют друг с другом не только за +счет высокоуровневого промежуточного кода, но и за счет общей системы типов (CTS +- Common Type System - общая система типов). Все стандартные +типы (строковые, символьные, числовые и логический) имеют одинаковое +представление в памяти во всех .NET-языках. Это +позволяет, например, создать библиотеку dll +на C#, поместить в нее описание класса, а затем воспользоваться этой +библиотекой из программы на PascalABC.NET, сконструировав объект +данного класса. Можно также разработать библиотеку на PascalABC.NET, +а потом подключить ее к проекту на Visual Basic.NET. +Отметим, что традиционные +библиотеки dll не позволяют хранить классы, доступные +извне, и обладают рядом других ограничений.

+

Важнейшими средствами, предоставляемыми платформой +.NET, являются единый способ обработки ошибок - генерация и +перехват исключений, - а также автоматическое управление освобождением +динамической памяти, называемое сборкой мусора. Последнее, в частности, +означает, что отсутствует необходимость в деструкторах классов.

+

Имеются программы, +которые могут восстанавливать текст программы по IL-коду +(например, программа ILSpy).

+

Помимо JIT-компилятора, важной частью +платформы .NET является набор стандартных библиотек (FCL +- Foundation Class Library - общая библиотека классов). +Среди них - библиотеки работы с графикой, сетью, базами данных, XML, +контейнерами, потоками, содержащие тысячи классов. Каждый .NET-язык +может пользоваться всеми возможностями этих библиотек.

+

Имеется открытая кроссплатформенная реализация среды +Microsoft.NET - среда +Mono, позволяющая в частности разрабатывать и +запускать .NET-программы под Linux.

+

Кратко отметим достоинства и недостатки платформы .NET.

+

Достоинства платформы .NET

    -
  1. .NET - .NET-. C#, +
  2. Платформа .NET поддерживает множество + .NET-языков. В их числе C#, Visual Basic.NET, F#, - C++, + управляемый C++, Delphi Prism, Oberon, Zonnon,  Iron Python, Iron Ruby, PascalABC.NET.
  3. -
  4. .NET- - : , , , , -, .
  5. -
  6. .NET- , - .
  7. -
  8. FCL.
  9. -
  10. .NET- .
  11. -
  12. .NET - Microsoft, , - .
  13. -
  14. .NET- , - .
  15. +
  16. Любой .NET-язык содержит самые современные +языковые возможности: классы, свойства, полиморфизм, исключения, перегрузка +операций, легкое создание библиотек.
  17. +
  18. .NET-языки легко сочетаются друг с другом, +похожи друг на друга по синтаксическим конструкциям и системе типов.
  19. +
  20. Имеется обширная библиотека стандартных классов FCL.
  21. +
  22. .NET-приложения компактны.
  23. +
  24. Платформа .NET активно развивается фирмой + Microsoft, добавляются как новые языковые возможности, +так и новые библиотеки.
  25. +
  26. Компилятор .NET-языка создать значительно проще, +чем компилятор обычного языка.
-

.NET

+

Недостатки платформы .NET

    -
  1. .NET- - , - .
  2. -
  3. .NET- - (, , - - .NET - ).
  4. -
  5. - , . - .
  6. -
  7. .NET- - .NET. - (, Windows Vista - Windows 7 .NET ).
  8. +
  9. Запуск .NET-приложения выполняется в несколько раз + медленнее запуска обычного приложения, поскольку требует загрузки в + оперативную память компонентов виртуальной машины и внешних библиотек.
  10. +
  11. .NET-код в некоторых ситуациях работает медленнее +обычного (однако, в большинстве задач это отставание незначительно, а в + некоторых - приложения .NET могут опережать + обычные программы).
  12. +
  13. Сборщик мусора начинает работу в момент +исчерпания динамической памяти, его работа занимает несколько миллисекунд. Для +приложений реального времени это непозволительно.
  14. +
  15. Запуск .NET-приложения обязательно требует +установки на компьютере платформы .NET. Без нее +приложение работать не будет (Отметим, что в Windows Vista и в + Windows 7 платформа .NET встроена).
-

, .NET - .

+

Отметим, что достоинства платформы .NET +многократно перекрывают ее недостатки.

diff --git a/PABCNetHelp/Common/PABCNETvsDelphi.html b/PABCNetHelp/Common/PABCNETvsDelphi.html index aef5c9cd3..57868d863 100644 --- a/PABCNetHelp/Common/PABCNETvsDelphi.html +++ b/PABCNetHelp/Common/PABCNETvsDelphi.html @@ -7,100 +7,100 @@ -

PascalABC.NET Delphi

-

+

Отличия языка PascalABC.NET от Delphi

+

Добавлено

    -
  1. += -= .NET - .
  2. -
  3. += -= *=   +
  4. Операции += -= для событий .NET и для процедурных + переменных.
  5. +
  6. Операции += -= *= для целых и  += -= *= /= - .
  7. -
  8. += .
  9. -
  10. .
  11. -
  12. new (ident := new type_name(params);).
  13. -
  14. new .
  15. -
  16. typeof .
  17. -
  18. uses - .NET ( + для вещественных.
  19. +
  20. Операция += для строк.
  21. +
  22. Подпрограммы с переменным числом параметров.
  23. +
  24. Операция new для вызова конструктора (ident := new type_name(params);).
  25. +
  26. Операция new для создания динамического массива.
  27. +
  28. Операция typeof .
  29. +
  30. Использование uses для + подключения пространств имен .NET (реализовано в Delphi Prism).
  31. -
  32. internal ( public, +
  33. Вид доступа internal (наряду с public, private, protected).
  34. -
  35. : var a: integer := +
  36. Инициализация переменных: var a: integer := 1;
  37. -
  38. : var a := +
  39. Инициализация переменных: var a := 1;
  40. -
  41. .
  42. -
  43. : for var +
  44. Объявление локальных переменных в блоке.
  45. +
  46. Объявление параметра цикла в заголовке цикла: for var i := 1 to 10 do, foreach var x in a do.
  47. -
  48. lock, .
  49. -
  50. .
  51. -
  52. .
  53. -
  54. (generics).
  55. -
  56. ( - Delphi Prism, ).
  57. -
  58. .
  59. -
  60. .
  61. -
  62. .
  63. -
  64. .
  65. -
  66. -.
  67. +
  68. Оператор lock, обеспечивающий синхронизацию потоков.
  69. +
  70. Методы в записях.
  71. +
  72. Инициализаторы полей в классах и записях.
  73. +
  74. Обобщенные классы (generics).
  75. +
  76. Реализованы типизированные файлы (в отличие от + Delphi Prism, где они убраны).
  77. +
  78. Упрощенный синтаксис модулей.
  79. +
  80. Описание методов внутри интерфейса класса или записи.
  81. +
  82. Реализация записью интерфейса.
  83. +
  84. Методы расширения.
  85. +
  86. Лямбда-выражения.
-

+

Изменено

    -
  1. .
  2. -
  3. foreach.
  4. -
  5. interface .NET.
  6. -
  7. .
  8. -
  9. . +
  10. Только сокращенное вычисление логических выражений.
  11. +
  12. Другой синтаксис foreach.
  13. +
  14. Интерфейсы interface в стиле .NET.
  15. +
  16. Другой синтаксис перегрузки операций.
  17. +
  18. Статические методы классов вместо классовых методов. Отсутствие типа TClass.
  19. -
  20. - .
  21. -
  22. object - - System.Object.
  23. -
  24. exception - - System.Exception.
  25. -
  26. string 1, 0.
  27. -
  28. Write - .
  29. -
  30. , , - - ( Delphi Object - Pascal - - ).
  31. -
  32. (set of +
  33. Деструкторы оставлены лишь для совместимости и не выполняют никаких + действий.
  34. +
  35. Тип object - + синоним System.Object.
  36. +
  37. Тип exception - + синоним System.Exception.
  38. +
  39. Индексация string с 1, директива переключения на индексацию с 0.
  40. +
  41. Процедура Write + выводит любые типы.
  42. +
  43. Структурная эквивалентность типов для процедурных переменных, динамических массивов, + типизированных указателей и + множеств (в Delphi Object + Pascal - именная эквивалентность типов за исключением открытых + массивов).
  44. +
  45. Множества на базе произвольных типов (set of string).
  46. -
  47. .
  48. -
  49. () procedure of +
  50. Запрет использования указателей на управляемую память.
  51. +
  52. Процедурные переменные (делегаты) вместо procedure of object.
  53. -
  54. file - Read, +
  55. С бестиповыми файлами file + можно работать с помощью процедур Read, Write.
  56. -
  57. ( , - a[i][j] a[i,j] ).
  58. -
  59. overload.
  60. -
  61. Create.
  62. -
  63. ( - ).
  64. +
  65. Массивы массивов отличаются по типу от двумерных массивов (в частности, + записи a[i][j] и a[i,j] неэквивалентны).
  66. +
  67. Перегрузка выполняется без ключевого слова overload.
  68. +
  69. Все конструкторы имеют имя Create.
  70. +
  71. Автоматическое управление памятью с помощью сборщика мусора (за + исключением указателей на неуправляемую память).
-

+

Отсутствует

    -
  1. packed threadvar inline asm exports unsafe resourcestring dispinterface in out absolute dynamic +
  2. Ключевые слова и директивы packed threadvar inline asm exports unsafe resourcestring dispinterface in out absolute dynamic local platform requires export message resident assembler safecall automated far near stdcall cdecl published stored contains implements varargs default deprecated package register dispid pascal writeonly - .
  3. -
  4. : Char(b) + и связанные с ними возможности.
  5. +
  6. Приведение типов для переменных: Char(b) := 'd'.
  7. -
  8. pointer.
  9. -
  10. .
  11. -
  12. PChar.
  13. -
  14. @ .
  15. -
  16. .
  17. -
  18. (var a; +
  19. Возможность присвоить адрес подпрограммы указателю pointer.
  20. +
  21. Записи с вариантами.
  22. +
  23. Строки PChar.
  24. +
  25. Возможность использовать операцию @ для процедурных переменных.
  26. +
  27. Вариантные типы.
  28. +
  29. Бестиповые параметры (var a; const b).
  30. -
  31. ( !).
  32. -
  33. , (message).
  34. -
  35. .
  36. +
  37. Открытые массивы (не путать с динамическими!).
  38. +
  39. Методы, связанные с сообщениями (message).
  40. +
  41. Вложенные определения классов.
diff --git a/PABCNetHelp/Common/features.html b/PABCNetHelp/Common/features.html index 933577823..ea7505e78 100644 --- a/PABCNetHelp/Common/features.html +++ b/PABCNetHelp/Common/features.html @@ -14,265 +14,265 @@ -

-

- PascalABC.NET.

+

Коротко о главном

+

Данный текст содержит краткий обзор +особенностей PascalABC.NET.

    -
  • PascalABC.NET - , , - , . - PascalABC.NET - , - .
  • -
  • PascalABC.NET - . Delphi - C#.
  • -
  • PascalABC.NET Microsoft .NET - - , , , - . , , PascalABC.NET - .NET-.
  • -
  • PascalABC.NET , , - C#, , - C++ Delphi.
  • -
  • PascalABC.NET - Delphi Oxygene.
  • -
  • , - , - (, Free Pascal - ). , - , - , - Turbo Pascal - , - - , - .
  • -
  • PascalABC.NET - , .
  • -
  • PascalABC.NET . - Pascal ABC 2002 . PascalABC.NET . , .
  • +
  • PascalABC.NET – легковесная и мощная среда разработки программ с + подробной справочной системой, средствами подсказки по коду, + автоформатированием, встроенным отладчиком и встроенным дизайнером форм. + Интегрированная среда разработки PascalABC.NET ориентирована на создание + проектов малой и средней сложности, а также на обучение современному + программированию.
  • +
  • PascalABC.NET – мощный и современный язык + программирования. По предоставляемым возможностям он превосходит язык Delphi + и содержит практически все возможности языка C#.
  • +
  • PascalABC.NET опирается на платформу Microsoft .NET - её языковые + возможности и библиотеки, что делает его гибким, эффективным, постоянно + развивающимся. Кроме того, можно легко сочетать библиотеки, разработанные на PascalABC.NET + и других .NET-языках.
  • +
  • Компилятор PascalABC.NET генерирует код, выполняющийся так же быстро, + как и код на C#, и несколько медленнее, чем код на + C++ и Delphi.
  • +
  • PascalABC.NET является представителем линейки современных языков Паскаль + вместе с Delphi и Oxygene.
  • +
  • Мнение, что язык Паскаль устарел и утрачивает свои + позиции, основано на представлении о старом Паскале и старых средах + программирования (например, Free Pascal с его + несовременной консольной оболочкой). К сожалению, масса отечественной учебной литературы + с упорством, + достойным лучшего применения, ориентируется на отживший + Turbo Pascal с древней + консольной оболочкой, бедной графической библиотекой и устаревшими + средствами объектно-ориентированного программирования, развивая у + обучающихся стойкое отвращение к языку Паскаль вообще.
  • +
  • PascalABC.NET расширен современными языковыми + возможностями для легкого, компактного и понятного програмирования.
  • +
  • PascalABC.NET – достаточно зрелая среда. Ее прототип – учебная система + Pascal ABC – появилась в 2002 году. PascalABC.NET – развивающаяся среда. Ведутся разработки новых языковых возможностей, новых библиотек.
-

, - PascalABC.NET. 

-

( -C:\PABCWork.NET) Samples\!MainFeatures.

-

- "/ " , - PascalABC.NET.

-

+

Далее приводится ряд программ с короткими комментариями, раскрывающих +возможности и особенности языка PascalABC.NET. 

+

Тексты программ располагаются в рабочей папке (по умолчанию +C:\PABCWork.NET) в подпапке Samples\!MainFeatures.

+

Для запуска программ данное окно должно быть открыто через +пункт меню "Помощь/Коротко о главном" так, чтобы оно не +полностью закрывало окно оболочки PascalABC.NET.

+

Основное

    -
  1. AssignExt.pas. - += -= - *= /= . /= , , -.
  2. -
  3. BlockVar.pas. +
  4. AssignExt.pas. Данный + пример иллюстрирует использование расширенных операторов присваивания += -= + *= /= для целых и вещественных. Оператор /= для целых, разумеется, +запрещен.
  5. +
  6. BlockVar.pas. Переменные могут описываться внутри блока begin-end - . - , PascalABC.NET - 30.
  7. -
  8. AutoVars.pas. , - : ( ). - for - , .
  9. -
  10. SimpleNewFeatures.pas. , - .
  11. -
  12. WriteAll.pas. write - . - , . , - .
  13. -
  14. WriteFormat.pas. WriteFormat - . - .NET.
  15. -
  16. StandardTypes.pas. - . .
  17. -
  18. RandomDiap.pas. - Random(a,b), +и инициализироваться при описании. Это крайне удобно для промежуточных + переменных, а в PascalABC.NET в силу особенностей +реализации еще и ускоряет доступ к переменным процентов на 30.
  19. +
  20. AutoVars.pas. Если переменная инициализируется при описании, то ее тип +можно не указывать: он определяется по типу правой части (автоопределение типа). Переменную - параметр цикла for + можно описывать прямо в заголовке цикла, сочетая это с автоопределением типа.
  21. +
  22. SimpleNewFeatures.pas. Пример, объединяющий + возможности из предыдущих трех примеров.
  23. +
  24. WriteAll.pas. Процедура write + выводит любой тип. +В частности, она выводит все элементы множества. Если тип ей неизвестен, то она +выводит имя типа.
  25. +
  26. WriteFormat.pas. Стандартная процедура WriteFormat +позволяет осуществлять форматированный вывод. Вид форматной строки заимствуется +из .NET.
  27. +
  28. StandardTypes.pas. В этой программе приведены все стандартные целые и +вещественные типы. Программа выводит их размеры.
  29. +
  30. RandomDiap.pas. К функциям генерации случайных чисел добавилась + Random(a,b), возвращающая случайное целое в диапазоне [a,b]. - Randomize .
  31. -
  32. RealExtNums.pas. .NET - . ( 0, - ) - "", "NaN" ( ).
  33. -
  34. Foreach.pas. - foreach - , , - (, List<T>). - .
  35. -
  36. Amp.pas. , - & - . , - . , &Type - System.Type.
  37. +Процедуру Randomize в начале программы вызывать не надо. +
  38. RealExtNums.pas. Действия с вещественными значениями не могут в .NET + привести к переполнению. При некорректных операциях (деление на 0, + переполнение или взятие логарифма отрицательного числа) мы получим либо + значение "бесконечность", либо значение "NaN" (не число).
  39. +
  40. Foreach.pas. Оператор + foreach предназначен для цикла по + контейнерам, таким как массивы, множества и контейнеры стандартной + библиотеки (например, List<T>). Элементы контейнера + доступны только на чтение.
  41. +
  42. Amp.pas. Ключевые слова могут использоваться в качестве имен, в + этом случае перед ними следует ставить значок & + снятия атрибута ключевого слова. Кроме того, ключевые слова могут + использоваться в качестве полей. Например, &Type + или System.Type.
-

+

Типы

    -
  1. CharFunc.pas. Char Unicode 2 . - Ord Chr Unicode. - OrdAnsi ChrAnsi Windows.
  2. -
  3. StringTypes.pas. string - .NET- System.String. , - NET- 1. - - string[n] shortstring=string[255]. - , .
  4. -
  5. StringMethods.pas. string - .NET-. - , .
  6. -
  7. StringInteger.pas. - . . - - Parse (, - integer.Parse(s)). - ToString - (, r.ToString).
  8. -
  9. Enum.pas. - , .. - , - System.Enum.
  10. -
  11. Sets.pas. . - -, - write .
  12. -
  13. DynArray.pas. array of - T . - - SetLength, - new T[n]. SetLength - . , - System.Array, - . - &Array.Sort &Array.Resize.
  14. -
  15. InitRecords.pas. . - -.
  16. -
  17. UntypedFile.pas. file Delphi. - BlockRead - BlockWrite, - . - .
  18. -
  19. PointerToRef.pas. . - , , - .
  20. -
  21. Pointers.pas References.pas. . - .
  22. -
  23. StructTypeEquiv.pas. Delphi, - , - . , - , , . +
  24. CharFunc.pas. Символы Char хранят Unicode и поэтому занимают 2 байта. + Функции Ord и Chr работают именно с Unicode. Для совместимости функции + OrdAnsi и ChrAnsi работают в однобайтовой кодировке Windows.
  25. +
  26. StringTypes.pas. Строки string + занимают память переменной длины и проецируются на .NET-тип System.String. Однако, в отличие от + NET-строк они изменяемы и индексируются с 1. Для + работы со строками фиксированной длины следует использовать тип + string[n] или shortstring=string[255]. + В частности, типизированные файлы допустимы только для коротких строк.
  27. +
  28. StringMethods.pas. Строки string имеют ряд + методов как .NET-классы. В этих методах + предполагается, что строки индексируются с нуля.
  29. +
  30. StringInteger.pas. Все типы - классы. Простые типы тоже. Поэтому преобразование строки в целое и вещественное + проще выполнять с помощью статических методов + Parse соответствующего класса (например, + integer.Parse(s)). Преобразование целого или вещественного в строку + удобнее выполнять с помощью экземплярного метода ToString + (например, r.ToString).
  31. +
  32. Enum.pas. Перечислимый тип позволяет обращаться к его константам + не только непосредственно, но и используя запись вида ИмяТипа.ИмяКонстанты. + Нелишне отметить, что все перечислимые типы - производные от System.Enum.
  33. +
  34. Sets.pas. Множества могут иметь произвольный базовый тип. Внутри + множество хранится как хеш-таблица, однако при выводе множества в процедуре + write его элементы упорядочиваются.
  35. +
  36. DynArray.pas. Динамические массивы array of + T представляют собой ссылки. Память под них должна выделяться либо + вызовом стандартной процедуры + SetLength, либо использованием инициализатора вида + new T[n]. Процедура SetLength + сохраняет старое содержимое массива. Динамические массивы являются классом, производным от + класса System.Array, имеющего достаточно + богатый интерфейс. Следует упомянуть прежде всего статические методы + &Array.Sort и &Array.Resize.
  37. +
  38. InitRecords.pas. В записях допустимы инициализаторы полей. + Поля записи инициализируются при создании переменной-записи.
  39. +
  40. UntypedFile.pas. Бестиповые файлы file изменены по сравнению с Delphi. + Отсутствуют процедуры BlockRead и + BlockWrite, но в бестиповой файл можно + непосредственно записывать данные разных типов. Лишь бы считывание + производилось в том же порядке.
  41. +
  42. PointerToRef.pas. Имеют место некоторые ограничения для указателей на управляемую память. + Так, указатель не может прямо или косвенно указывать на объект класса, + память для которого выделена вызовом конструктора.
  43. +
  44. Pointers.pas и References.pas. Указатели утрачивают свои позиции. Вместо них мы + рекомендуем активно использовать ссылки.
  45. +
  46. StructTypeEquiv.pas. В отличие от Delphi, + для некоторых типов имеет место структурная, а не именная эквивалентность + типов. Так, структурная эквивалентность имеет место для динамических + массивов, указателей, множеств и процедурных типов.
-

+

Подпрограммы

    -
  1. FuncParams.pas. - params - - . - .
  2. -
  3. Overload.pas. - overload.
  4. -
  5. ProcVars.pas. "" - +=. - -=. - , .
  6. -
  7. SwapT.pas. - : procedure +
  8. FuncParams.pas. Подпрограммы с переменным числом параметров делаются + легко добавлением ключевого слова params + перед параметром - динамическим массивом. Такой параметр должен быть + последним в списке.
  9. +
  10. Overload.pas. Перегрузка имен подпрограмм осуществляется без ключевого + слова overload.
  11. +
  12. ProcVars.pas. Процедурные переменные могут "накапливать" действия при + помощи оператора +=. Эти действия можно отключать при помощи + оператора -=. Процедурные переменные могут инициализироваться не только + обычными подпрограммами, но и статическими и экземплярными методами класса.
  13. +
  14. SwapT.pas. Обобщенные подпрограммы имеют простой синтаксис и + используются сразу наряду с обычными: procedure Swap<T>(var x,y: T);
-

+

Модули

    -
  1. SystemUnitTest.pas. PABCSystem, System, - Delphi, - uses. , - .NET - System. - System, - Math Utils - Delphi. - PABCSystem +
  2. SystemUnitTest.pas. Системный модуль имеет название PABCSystem, а не System, как в + Delphi, и подключается неявно первым в списке + uses. Причина такого именования состоит в том, что + важнейшее пространство имен .NET имеет имя + System. Системный модуль + объединяет многие подпрограммы модулей System, + Math и Utils языка + Delphi. Данная программа иллюстрирует пересечение имен во модуле + PABCSystem и пространстве имен System.
  3. -
  4. MainProgram.pas - MyUnit.pas. ( - ), - . - .
  5. -
  6. SystemUnitTest.pas. .NET - , : - .NET uses. - , Delphi - - uses, - PABCSystem .
  7. -
  8. Main.pas - MyDll.pas. PascalABC.NET - dll. dll - - , unit - library. - dll - reference.
  9. +
  10. MainProgram.pas и + MyUnit.pas. Модуль может иметь упрощенный синтаксис (без + деления на раздел интерфейса и раздел реализации), что удобно для начального + обучения. В этом случае все описанные имена попадают в раздел интерфейса + модуля.
  11. +
  12. SystemUnitTest.pas. Для использования пространств имен .NET + применяется тот же синтаксис, что и при подключении модулей: + пространства имен .NET указываются в списке uses. + Порядок поиска имен такой же, как и в Delphi - + справа налево в списке uses, модуль + PABCSystem просматривается последним.
  13. +
  14. Main.pas и + MyDll.pas. В PascalABC.NET легко создать и использовать + dll. Библиотека dll по-существу представляет собой + модуль, где вместо ключевого слова unit + используется слово library. Для подключения + dll к другой программе используется директива + компилятора reference.
  15. CallCS.pas. PascalABC.NET - - .NET-, - .NET-. , -  PascalABC.NET dll, + полноценный .NET-язык, легко совмещаемый с другими + .NET-языками. В данном примере показывается, как в программе + на  PascalABC.NET вызвать функцию из dll, созданной на C#.
  16. -
  17. CallNative.pas. PascalABC.NET - dll.
  18. +
  19. CallNative.pas. PascalABC.NET позволяет легко вызывать функции + из обычных dll.
-

+

Стандартные графические библиотеки

    -
  1. GraphABCTest.pas. - GraphABC . - : - - . , - - , , , - NET. - begin , - .
  2. -
  3. MouseEvents.pas. - , - .
  4. -
  5. ABC.pas. ABCObjects - - - . , - - .
  6. +
  7. GraphABCTest.pas. Графическая библиотека + GraphABC заточена под легкое обучение программированию графики. Она + скрывает большинство сложностей программирования графики: сама осуществляет + перерисовку графического окна в нужный момент и заботится о синхронизации + рисования в нескольких обработчиках. Кроме того, графические примитивы - + процедурные, а значит, не надо создавать многочисленные классы, как в + NET. И еще можно писать графические команды сразу + после begin основной программы, то есть использовать графику в + несобытийных приложениях.
  8. +
  9. MouseEvents.pas. Для графических приложений можно + использовать простейшие события мыши и клавиатуры, реализованные как + глобальные процедурные переменные.
  10. +
  11. ABC.pas. Библиотека векторных графических объектов ABCObjects используется нами + для раннего обучения школьников основам объектно-ориентированного + программирования. Однако, ее вполне можно использовать для написания + несложных графических обучающе-игровых приложений.
-

+

Классы

    -
  1. AllFromObject.pas. - Object, - . - , - GetType. typeof System.Type.
  2. -
  3. WriteRecord.pas. ToString - , +
  4. AllFromObject.pas. Все классы - наследники Object, все типы - классы. + У каждой переменной можно узнать тип, вызвав метод + GetType. Операция typeof для типа возвращает System.Type.
  5. +
  6. WriteRecord.pas. Переопределив метод ToString в классе или + записи, мы получаем возможность выводить их значения в процедуре writeln
  7. -
  8. ClassConstructor.pas. - class. - .
  9. -
  10. PersonInternal.pas. - new . - , , - Create. - ( C++, C# +
  11. ClassConstructor.pas. Для статических методов и полей используется ключевое + слово class. Статические конструкторы используются для нетривиальной + инициализации статических полей.
  12. +
  13. PersonInternal.pas. Новый синтаксис конструкторов использует ключевое слово + new и является предпочтительным. По этой + причине все конструкторы, определенные в старом стиле, должны иметь имя + Create. Описание методов может производиться непосредственно внутри классов и записей + (как в C++, C# и Java)
  14. -
  15. Records.pas. , - . .
  16. -
  17. Boxing.pas. Object . - .
  18. -
  19. GarbageCollection.pas. . - , , , - , . - nil. +
  20. Records.pas. Методы и конструкторы в записях можно использовать так же, как и в + классах. От записей нельзя наследовать и записи нельзя наследовать.
  21. +
  22. Boxing.pas. При присваивании размерного типа объекту типа Object происходит упаковка. Для + распаковки следует использовать явное приведение типа.
  23. +
  24. GarbageCollection.pas. Деструкторы отсутствуют. Автоматическая сборка мусора + для возврата памяти, распределенной объектной переменной, требует, чтобы на + эту память никто более не ссылался, прямо или косвенно. Поэтому для + освобождения памяти обычно достаточно присвоить объектной переменной nil.
  25. -
  26. OperatorOverloading.pas. C++ C#, PascalABC.NET - .
  27. -
  28. Interf.pas. - C# Java. - Delphi - COM .
  29. -
  30. Stack.pas. (generics) - , .
  31. -
  32. Where.pas. . - : - - , .
  33. +
  34. OperatorOverloading.pas. Как и в C++ и C#, в PascalABC.NET можно перегружать + знаки операций для записей и классов.
  35. +
  36. Interf.pas. Интерфейсы + семантически совпадают с интерфейсами в C# и Java. Сложная + реализация интерфейсов Delphi на основе + COM отвергнута.
  37. +
  38. Stack.pas. Обобщенные классы (generics) + позволяют создавать классы, параметризованные одним или несколькими типами.
  39. +
  40. Where.pas. Можно задавать ограничения на типы параметров обобщенных классов. + Ограничения бывают трех сортов: наличие у типа-параметра конструктора по + умолчанию, наследование его от конкретного класса или реализация интерфейса.
-

.NET

+

Стандартная библиотека .NET

    -
  1. DateTime.pas. DateTime +
  2. DateTime.pas. Данный пример иллюстрирует применение класса DateTime из стандартной библиотеки .NET.
  3. -
  4. LinkedList.pas. - .NET.
  5. -
  6. WinFormWithButton.pas. .
  7. +
  8. LinkedList.pas. Данный пример иллюстрирует использование контейнерных + классов из стандартной библиотеки .NET.
  9. +
  10. WinFormWithButton.pas. Данный пример иллюстрирует создание оконного приложения.
diff --git a/PABCNetHelp/Common/main.html b/PABCNetHelp/Common/main.html index b79dc9dff..9fe9b47d7 100644 --- a/PABCNetHelp/Common/main.html +++ b/PABCNetHelp/Common/main.html @@ -21,97 +21,97 @@ -

PascalABC.NET

+

Система PascalABC.NET

-

PascalABC.NET - - Pascal Microsoft .NET. - PascalABC.NET - - : -, -, - , -, -, - , - , --, - , - OpenMP. PascalABC.NET - , - .

+

PascalABC.NET это +система +программирования и язык Pascal нового поколения для платформы Microsoft .NET. +Язык PascalABC.NET содержит все основные +элементы +современных языков программирования: +модули, +классы, +перегрузку операций, +интерфейсы, +исключения, +обобщенные классы, +сборку мусора, +лямбда-выражения, а +также некоторые средства параллельности, в том числе +директивы OpenMP. Система PascalABC.NET включает +в себя также простую интегрированную среду, ориентированную на эффективное +обучение современному программированию.

-

1970 . - . 80- - Turbo Pascal - Borland, 90- - Delphi, - Windows. -Delphi - , - Object Pascal. Delphi 7 - Delphi Object Pascal - Delphi. - Object Pascal - open source Free +

Язык Паскаль был разработан швейцарским ученым Никлаусом Виртом в 1970 г. как +язык со строгой типизацией и интуитивно понятным синтаксисом. В 80-е годы +наиболее известной реализацией стал компилятор Turbo Pascal +фирмы Borland, в 90-е ему на смену пришла среда +программирования Delphi, которая стала одной из +лучших сред для быстрого создания приложений под Windows. +Delphi ввела в язык Паскаль ряд удачных объектно-ориентированных расширений, +обновленный язык получил название Object Pascal. С версии Delphi 7 +язык Delphi Object Pascal стал называться +просто Delphi. Из +альтернативных реализаций Object Pascal следует отметить +многоплатформенный open source компилятор Free Pascal.

-

PascalABC.NET - : - Pascal , (Free Pascal), - , - -.

-

PascalABC.NET - Microsoft.NET, PascalABC.NET - - .NET-: C#, -Visual Basic.NET, C++, Oxygene . .NET - , - , , , - , .NET-. - , Microsoft.NET, - .

-

PascalABC.NET Delphi (Object Pascal). - Delphi, - . , - : , , +=, --=, *=, /=, -, , - - , -set , - foreach, - for foreach - , - (generics), -, -, -, -- .

-

PascalABC.NET - RemObjects Oxygene (Object Pascal 21 ). - .NET: , - , Main, - . , -RemObjects Oxygene - - ( Visual Studio - IDE), .

-

PascalABC.NET - , ( , - , ), - , , -.

-

PascalABC.NET - PascalABCCompiler Team (web- +

Создание PascalABC.NET +диктовалось двумя основными причинами: устаревание +стандартного языка Pascal и систем, построенных на его основе (Free Pascal), а +также необходимость в современной простой, бесплатной и мощной +интегрированной среде +программирования.

+

PascalABC.NET опирается на передовую платформу +программирования Microsoft.NET, которая обеспечивает язык PascalABC.NET +огромным количеством стандартных библиотек и позволяет легко +сочетать его с другими .NET-языками: C#, +Visual Basic.NET, управляемый C++, Oxygene и др. Платформа .NET предоставляет также такие языковые +средства как единый механизм обработки исключений, единый механизм управления +памятью в виде сборки мусора, а также возможность свободного использования классов, наследования, +полиморфизма и интерфейсов между модулями, написанными на разных .NET-языках. +О том, что такое платформа Microsoft.NET, о ее преимуществах для программирования +и для обучения можно прочитать здесь.

+

Язык PascalABC.NET близок к реализации Delphi (Object Pascal). В нем +отсутствует ряд специфических языковых конструкций Delphi, +некоторые конструкции изменены. Кроме этого, +добавлен ряд возможностей: имеется автоопределение типа при описании, можно описывать переменные внутри блока, имеются операции +=, +-=, *=, /=, методы можно описывать непосредственно в теле класса или +записи, можно пользоваться встроенными в стандартные типы методами и свойствами, память под объекты управляется +сборщиком мусора и +не требует явного освобождения, множества +set могут быть созданы на основе произвольных типов, введен +оператор foreach, переменные +циклов for и foreach +можно описывать непосредственно в заголовке цикла, имеются +обобщенные классы и подпрограммы (generics), +последовательности, +кортежи, +срезы, +лямбда-выражения и др.

+

Близким по идеологии к PascalABC.NET +является язык RemObjects Oxygene (Object Pascal 21 века). Однако он сильно изменен в +сторону .NET: нет глобальных описаний, все описания +помещаются в класс, содержащий статический метод Main, +отсутствует ряд стандартных подпрограмм языка Паскаль. Кроме того, система +RemObjects Oxygene - платная +и не содержит собственной оболочки (встраивается в Visual Studio +и другие IDE), что практически делает невозможным ее использование в сфере образования.

+

Интегрированная среда PascalABC.NET +обеспечивает подсветку синтаксиса, подсказку по коду (подсказка по точке, +подсказка параметров подпрограмм, всплывающая подсказка по коду), форматирование +текста программы по запросу, переход к определению и реализации имени, элементы +рефакторинга.

+

Все права на систему программирования PascalABC.NET +принадлежат PascalABCCompiler Team (web-сайт http://pascalabc.net).

diff --git a/PABCNetHelp/Examples/GraphABC/NonBlinkAnim1.html b/PABCNetHelp/Examples/GraphABC/NonBlinkAnim1.html index 00433cbb8..a95b40a15 100644 --- a/PABCNetHelp/Examples/GraphABC/NonBlinkAnim1.html +++ b/PABCNetHelp/Examples/GraphABC/NonBlinkAnim1.html @@ -8,9 +8,9 @@ -

- LockDrawing -Redraw : +

Анимация без мерцания

+Данная программа иллюстрирует применение процедур LockDrawing и +Redraw для реализации анимации без мерцания:
 uses GraphABC;
@@ -28,13 +28,13 @@
 
-

: , -LockDrawing ( -), - , Redraw. -Redraw , - -.

+

Основная идея состоит в следующем: отключим рисование на экране, вызвав +LockDrawing (рисование будет осуществляться только во внеэкранном +буфере), после чего будем всякий раз формировать новый кадр изображения и +выводить его целиком на экран, вызывая Redraw. При вызове +Redraw перерисовывается все графическое окно, +поэтому скорость анимации ограничена скоростью вывода внеэкранного буфера на +экран.

diff --git a/PABCNetHelp/Examples/GraphABCEvents/GEv1.html b/PABCNetHelp/Examples/GraphABCEvents/GEv1.html index e7aee0e64..8dc80a20b 100644 --- a/PABCNetHelp/Examples/GraphABCEvents/GEv1.html +++ b/PABCNetHelp/Examples/GraphABCEvents/GEv1.html @@ -8,8 +8,8 @@ -

- : +

Рисование мышью в графическом окне

+Данная программа осуществляет рисование мышью в графическом окне:
 uses GraphABC;
@@ -25,7 +25,7 @@
 end;
 
 begin
-  //    
+  // Привязка обработчиков к событиям
   OnMouseDown := MouseDown;
   OnMouseMove := MouseMove
 end.
diff --git a/PABCNetHelp/Examples/GraphABCEvents/GEv2.html b/PABCNetHelp/Examples/GraphABCEvents/GEv2.html
index f78807c40..47482279c 100644
--- a/PABCNetHelp/Examples/GraphABCEvents/GEv2.html
+++ b/PABCNetHelp/Examples/GraphABCEvents/GEv2.html
@@ -7,8 +7,8 @@
 
 
 
-

- : +

Перемещение окна с помощью клавиатуры

+Данная программа осуществляет перемещение графического окна с помощью клавиатуры:
@@ -25,7 +25,7 @@
 end;
 
 begin
-  //    
+  // Привязка обработчиков к событиям
   OnKeyDown := KeyDown;
 end.
 
diff --git a/PABCNetHelp/Examples/Timers/Timer1.html b/PABCNetHelp/Examples/Timers/Timer1.html index 9a354908e..f34146ee8 100644 --- a/PABCNetHelp/Examples/Timers/Timer1.html +++ b/PABCNetHelp/Examples/Timers/Timer1.html @@ -8,9 +8,9 @@ -

- 1 100 - 3 :
+

Пример использования таймера

+Данная программа выводит 1 каждые 100 миллисекунд в +течение 3 секунд:
 uses Timers;
 
@@ -28,9 +28,9 @@
 
-

Sleep , - , - .

+

Вызов Sleep здесь обязателен, иначе +программа после создания таймера сразу закончится, и обработчик таймера ни разу +не сработает.

diff --git a/PABCNetHelp/ForEducation/CheckedTasks/checkedtasks1.html b/PABCNetHelp/ForEducation/CheckedTasks/checkedtasks1.html index 4f033b07f..55680ff9b 100644 --- a/PABCNetHelp/ForEducation/CheckedTasks/checkedtasks1.html +++ b/PABCNetHelp/ForEducation/CheckedTasks/checkedtasks1.html @@ -6,43 +6,43 @@ -

Begin3 Programming Taskbook

+

Задание Begin3 из электронного задачника Programming Taskbook


-

Begin3 , - - . - . +

Задание Begin3 относится к самой первой группе задачника, посвященной +знакомству с вводом-выводом и оператором присваивания. +Приведем формулировку этого задания.

-

Begin3. - a b. - S=a*b P=2*(a+b).

-

+

Begin3. Даны стороны +прямоугольника a и b. +Найти его площадь S=a*b и периметр P=2*(a+b).

+

Далее по шагам опишем сценарий выполнения задания в системе PascalABC.NET.


-

1. - -PT4 - Task, - :

+

Шаг 1. Для +выполнения заданий из электронного задачника подключим к программе модуль +PT4 и вызовем в +начале программы процедуру Task, передав ей в +качестве параметра имя задания:

uses PT4;
begin
  Task('Begin3');

end.
-

, . - . -. - PT4Load, - : +

Заметим, что эту программу не обязательно набирать вручную. Для автоматической генерации данной программы +выполним следующие действия. Нажмем кнопку +. На экране появится окно +программного модуля PT4Load, позволяющего создать программу-заготовку для требуемого задания:

-

- Begin3 Enter. - - Begin3.pas - PascalABC.NET -( C:\PABCWork.NET).

-

( F9), - :

+

Наберем в поле ввода «Задание» +текст Begin3 и нажмем Enter. +После этого указанный выше текст сгенерируется автоматически и сохранится в +файле Begin3.pas в рабочем каталоге +системы PascalABC.NET +(по умолчанию это каталог C:\PABCWork.NET).

+

Запустим программу (нажав клавишу F9), +чтобы увидеть на экране текст задания:

@@ -52,14 +52,14 @@ -

( ), - -. +

Запуск нашей программы был признан ознакомительным (и поэтому правильность решения не анализировалась), +так как в ходе ее выполнения не было совершено ни одной операции ввода-вывода.


-

2. -a b - , , read. - : +

Шаг 2. Переменные +a и b +считываются из полей ввода, выделенных желтым цветом, с помощью обычной процедуры read. Закроем окно задачника +и изменим программу следующим образом:

uses PT4;
var a, b: integer;
@@ -67,7 +67,7 @@   read(a, b);
end.
-

:

+

После запуска этого вариант программы окно задачник примет вид:

@@ -75,36 +75,36 @@ -

, - — a b -. , - -( ), , - , -. +

Как видим, исходные данные поменялись и появилось сообщение +об ошибке — переменные a и b должны быть объявлены как +вещественные. Если запуск программы не является ознакомительным, то в окне задачника +появляется раздел с полученными результатами +(в нашем случае он не содержит ни одного числа), а также панель индикаторов, +показывающих количество введенных и выведенных данных, а также число успешных тестовых запусков +программы.


-

3. :

+

Шаг 3. Исправим тип исходных данных:

uses PT4;
var a, b: real;
begin

  Task('Begin3');
  read(a, b);
end.
-

:

+

Вновь запустим программу:

-

, . - , - (, , , - , / ). +

Электронный задачник предупреждает, что не выведен результат. +Обратите внимание на то, что для сообщений о различных видах ошибок используются +разные цвета (например, фиолетовый для ошибок, связанных с несоответствием типов, +и оранжевый для ошибок, связанных с вводом/выводом недостаточного числа данных).


-

4. - , :

+

Шаг 4. Проведем +вычисления и выведем результирующие данные, но в неверном порядке:

uses PT4;
var a, b, S, P: real;
begin

  Task('Begin3');
@@ -114,49 +114,49 @@   write(P, S)
end.
-

:

+

Вновь запустим программу:

-

, , , - . - - , .

+

Мы видим, что все требуемые исходные данные введены, все результаты выведены, +однако полученные результаты имеют неверные значения. +В случае ошибочного решения окно задачника всегда содержит раздел с примером +верного решения, чтобы можно было сравнить полученные и правильные результаты.


-

5. -:

+

Шаг 5. Исправим +ошибку:

uses PT4;
var a, b, S, P: real;
begin

  Task('Begin3');
  read(a, b);
  S := a * b;
  P := 2 * (a + b);
  write(S, P)
end.
-

:

+

После запуска программы увидим следующее окно:

-

, - .

+

Если решение является правильным, то дополнительный раздел с примером правильного +решения в окне не выводится.


-

6. , - . -!:

+

Шаг 6. Чтобы задание считалось выполненным, запустим +программу еще два раза. В результате в окне задачника появится сообщение «Задание +выполнено!»:

-

! Begin3 - ! , - « (F2)», - , F2. - PascalABC.NET , - - Shift+Ctrl+R. +

Поздравляем! Задание Begin3 +под руководством электронного задачника выполнено! Результаты выполнения заданий можно просмотреть, +щелкнув мышью на метке «Результаты (F2)», расположенной в правом верхнем +углу окна задачника, или нажав клавишу F2. +После закрытия окна задачника и возврата в среду PascalABC.NET результаты можно отобразить на экране, +нажав кнопку или нажав клавиатурную +комбинацию Shift+Ctrl+R.

 

 

diff --git a/PABCNetHelp/ForEducation/CheckedTasks/checkedtasks2.html b/PABCNetHelp/ForEducation/CheckedTasks/checkedtasks2.html index 80bb0dfec..f4c0268b9 100644 --- a/PABCNetHelp/ForEducation/CheckedTasks/checkedtasks2.html +++ b/PABCNetHelp/ForEducation/CheckedTasks/checkedtasks2.html @@ -6,74 +6,74 @@ -

a1

+

Задание a1 для исполнителя Робот


-

a1 , - . - . +

Задание a1 относится к вводным заданиям, посвященным +знакомству с основными командами исполнителя Робот. +Приведем формулировку этого задания.

-

a1. .

+

a1. Закрасить помеченные клетки.

-

.

+

Опишем сценарий решения задания.


-

1. - Robot - Task, - :

+

Шаг 1. Подключим +к программе модуль Robot и вызовем в +начале программы процедуру Task, передав ей в +качестве параметра имя задания:

uses Robot;
begin
  Task('a1');

end.
-

, - - RBa1 ( RB -, ). ( F9), - :

+

Чтобы не набирать указанный текст, нажмем кнопку + и +в появившемся окне наберем имя задания RBa1 (префикс RB +означает, что решается задача для Робота). Запустим программу (нажав клавишу F9), чтобы увидеть окно Робота с +графическим изображением задания:


-

2. - :

+

Шаг 2. +Наберем несколько команд Робота:

uses Robot;
begin
  Task('a1');
  Right;Right;Right;Right;
end.
-

, Enter - - :

+

Запустим программу, после чего нажмем Enter или кнопку +«Пуск» чтобы Робот начал выполнять +заложенную в него программу:

-

, - . - , .

+

После окончания движения Робота осуществляется проверка, все +ли помеченные клетки закрашены и находится ли Робот в конечной клетке. +Если проверка дает отрицательный ответ, то задание не считается выполненным.


-

3. - , -:

+

Шаг 3. +Выполним неверную команду, в результате которой Робот врежется в +стенку:

uses Robot;
begin
  Task('a1');
  Right;Right;Right;Right;
  Up;Up;Left;
end.
-

Enter - :

+

После запуска программы и нажатия Enter +получим следующее окно:

-

, , - Left , - .

+

Заметим, что квадратный индикатор состояния Робота окрасился в красный цвет, а +последняя команда Left не выполнилась, так как +после фатальной ошибки Робот прекратил выполнение задания.


-

4. - :

+

Шаг 4. +Исправим ошибку и выполним задание до конца:

uses Robot;
begin
  Task('a1');
@@ -90,9 +90,9 @@
-

.

-

, - , +

Последний рисунок не нуждается в комментариях.

+

Заметим, что сведения о выполненных заданиях +можно просмотреть, нажав кнопку .

 

diff --git a/PABCNetHelp/ForEducation/CheckedTasks/ctexam.html b/PABCNetHelp/ForEducation/CheckedTasks/ctexam.html index 8442b437f..81bccb8fe 100644 --- a/PABCNetHelp/ForEducation/CheckedTasks/ctexam.html +++ b/PABCNetHelp/ForEducation/CheckedTasks/ctexam.html @@ -9,33 +9,33 @@ -

, +

Задания, связанные с ЕГЭ по информатике


-

1. +

Пример 1. Простая задача на реализацию базовых алгоритмов


-

ExamBegin , - . - , , - . +

Группа заданий ExamBegin посвящена базовым алгоритмическим задачам, +включенным в кодификатор ЕГЭ по информатике. Процесс выполнения подобных заданий мы рассмотрим на примере +одной из простых задач, связанных с нахождением максимумов и минимумов из двух, трех или четырех чисел +без использования массивов и циклов.

-

ExamBegin2°. ; . - , . - : «MIN=» , «MAX=» - . +

ExamBegin2°. На вход подаются три вещественных числа; числа расположены в одной строке. +Вывести вначале минимальное, а затем максимальное из них. Каждое число должно выводиться на новой строке +и снабжаться комментарием: «MIN=» для минимального, «MAX=» +для максимального.


-

- +

Создание программы-заготовки и знакомство с заданием

-

, - - - « | », - - Shift+Ctrl+L. : +

Напомним, что программу-заготовку для решения этого задания можно создать с помощью +команды +меню «Модули | Создать шаблон программы», кнопки + или клавиатурной +комбинации Shift+Ctrl+L. Приведем текст созданной заготовки:

uses PT4Exam;
 
@@ -44,54 +44,54 @@
 
 end.
 
-

: +

После запуска программы на экране появится окно задачника:

-

- . +

Обсудим особенности программы-заготовки и окна задачника.

-

- PT4 - PT4Exam, - Exam. Task, - . , -, . - , - Exam , - Pascal. +

В программе-заготовке вместо модуля PT4 +подключается модуль PT4Exam, специально предназначенный для использования при выполнении +заданий групп Exam. Данный модуль содержит реализацию единственной процедуры Task, +инициализирующей задание. Никакие дополнительные процедуры, связанные с вводом-выводом, в него не включены. +Это обусловлено тем, что ввод-вывод при выполнении заданий групп Exam надо выполнять, используя +стандартные процедуры языка Pascal.

-

, , - (, , - ). - , . , - , , - Pascal. , - «» ( ), - . +

Основной особенностью окна задачника является то, что в разделе исходных данных отсутствуют данные, +выделенные желтым цветом (напомним, что желтый цвет используется для выделения данных, которые необходимо +вводить с помощью специальных процедур ввода задачника). Вместо этого в окне отображается +строка бирюзового цвета, содержащая числовые данные. Вид строки подчеркивает то обстоятельство, +что вводить данные требуется не с помощью специальных процедур ввода, имеющихся в задачнике, +а с помощью стандартных процедур языка Pascal. Отметим, что бирюзовый цвет используется в окне задачника +для отображения «внешних» данных (содержащихся в файлах или динамических структурах), доступ к которым +должен осуществляться с помощью стандартных средств используемого языка программирования.

-

-( «» , , , , - ), - : , - ( ). , - , , Pascal. +

Пример верного решения выделяется серым цветом +(в отличие от «настоящих» результатов, выведенных программой учащегося, которые, как и входные данные, +выделяются бирюзовым цветом), однако представление выходных данных совпадает с +представлением входных: это набор строк, +содержащих числовые данные (дополненные комментариями). Вид данных в разделе результатов показывает, +что для их вывода, как и для ввода исходных данных, необходимо использовать стандартные процедуры языка Pascal.

-. - , , , - Exam - . . - Exam , - . - , , -, ( ). - , , -, - - Pascal. +Примечание. +Если вы уже выполняли задания, связанные с обработкой файлов, то можете заметить, что отображение данных +в заданиях групп Exam +в точности соответствует способу отображения содержимого текстовых файлов. Это совпадение не случайно. +На самом деле во всех заданиях групп Exam все исходные данные хранятся в специальном входном текстовом файле, +а все результаты должны записываться в специальный выходной текстовый файл. Однако при этом не требуется +выполнять особых действий, связанных с определением имен этих файлов, связыванием файлов с файловыми +переменными, открытием и закрытием файлов (все эти действия выполняются задачником автоматически). +Для программы, выполняющей задание, эти файлы играют роль стандартных потоков ввода-вывода, +поэтому для доступа к ним достаточно использовать обычные процедуры ввода-вывода языка Pascal.


-

+

Ввод исходных данных и их обработка

-

. , - , : +

Приступим к выполнению задания. В данном случае следует использовать алгоритм, не требующий +применения массивов, поэтому опишем три простые переменные вещественного типа и введем в них исходные данные:

uses PT4Exam;
 var
@@ -101,36 +101,36 @@
   read(a, b, c);
 end.
 
-

read, . - readln: +

Мы воспользовались стандартной процедурой ввода read, введя все три исходных числа за один ее вызов. +Этого же результата мы могли бы добиться и с помощью процедуры readln:

readln(a, b, c);
 
-

, readln : +

Заметим, что использование отдельных процедур readln для ввода каждого числа приведет к ошибочному результату:

readln(a);
 readln(b);
 readln(c);
 
-

- . , - « » ( ), - «Input string was not in a correct format» -(« »). +

В этом случае уже после ввода первого числа произойдет автоматический переход на следующую строку +с исходными данными. Поэтому оставшиеся в первой строке числа будут пропущены, а поскольку +во второй строке «ничего нет» (входной поток состоит из единственной строки), +будет выведено сообщение об ошибке «Input string was not in a correct format» +(«Входная строка имела неверный формат»).

-

, Exam - read readln. +

Приведенный пример показывает, что при организации ввода данных в заданиях групп Exam необходимо учитывать особенности +стандартных процедур read и readln.

-

, . - Exam , - . , , - (, - string, «» , - real). Exam, - . +

При запуске приведенного выше варианта программы вид окна не изменится, поскольку мы не вывели никаких данных. +В заданиях групп Exam запуск программы считается ознакомительным до тех пор, пока программа не выведет +хотя бы один элемент результирующих данных. Кроме того, задачник не контролирует, +каким образом программа читает исходные данные (например, мы могли бы ввести всю исходную строку +в переменную типа string, а затем «разобрать» эту строку, выделив из нее три числа +и преобразовав их к типу real). Отмеченные особенности характерны именно для заданий групп Exam, +в которых для ввода данных не используются специальные средства задачника.

-

. - min max real : +

Реализуем алгоритм нахождения минимального и максимального элемента. Для этого опишем еще две +переменные min и max типа real и добавим в конец программы следующие операторы:

if a < b then
 begin
@@ -148,63 +148,63 @@ readln(c);
   if c > max then
     max := c;
 
-

, - . +

Таким образом, для одновременного нахождения минимального и максимального из трех чисел требуется +не более трех операций сравнения и не более трех операций присваивания.


-

+

Вывод результатов и их форматирование

-

. , , - Pascal, . +

Осталось вывести полученные результаты. Вывод, как и ввод, следует выполнять с помощью стандартных процедур +языка Pascal, учитывая их особенности.

-

, , , . - : +

Вначале, в качестве примера, организуем вывод, не соответствующий условиям задачи. Для этого добавим в конец программы +следующий оператор:

writeln(min, max);
 
-

: +

Приведем вид окна задачника при запуске полученной программы:

-

, , , - ( ). - : -, -( «», -), -, - , -, - ( ). +

Мы видим, что минимум и максимум найдены правильно, однако выведены не в том формате, +который требовался (требуемый формат приводится в разделе с примером верного решения). +Мы допустили при выводе три ошибки: во-первых, вывели оба числа в одной строке +(при этом они «слились», поскольку мы не предусмотрели вывод пробела-разделителя), во-вторых, +не снабдили числа комментариями и, в-третьих, не настроили их отображение в формате +с двумя дробными знаками (первое число было выведено с единственным знаком после точки).

-. , - , - , . : - , — , — - . , , - , , , - , - -. +Примечание. Следует обратить внимание на панель индикаторов, которая отображается между информационной панелью +и разделом с формулировкой задания в случае, если запуск программы не является +ни демонстрационным, ни ознакомительным. Обычно на этой панели выводятся три индикатора: первый указывает +количество введенных исходных данных, второй — количество выведенных результатов, а третий — +количество успешно пройденных тестовых испытаний. При выполнении заданий, связанных с ЕГЭ, первые два +индикатора являются неактивными, поскольку, как было отмечено выше, для получения исходных данных +и записи результатов не используются средства задачника, и поэтому он не в состоянии +проконтролировать каждую операцию ввода-вывода.

-

: +

Для исправления первых двух ошибок достаточно изменить вывод следующим образом:

writeln('MIN=', min);
 writeln('MAX=', max);
 
-

- . - - , «:» (): +

Однако в этом случае числа по-прежнему могут содержать неверное число дробных знаков. +Для исправления этой последней ошибки проще всего использовать +атрибуты форматирования, начинающиеся с символа «:» (двоеточие):

writeln('MIN=', min:0:2);
 writeln('MAX=', max:0:2);
 
-

( 0, - ). ( ) , - , . +

Первый атрибут определяет ширину поля вывода (если ширина равна 0, то используется минимально +необходимое поле вывода). Наличие второго атрибута (допустимого только для вещественных чисел) означает, +что число надо вывести в формате с фиксированной точкой, причем его значение равно количеству дробных знаков.

-

, - — , : +

При запуске исправленной программы будет выведено сообщение о верном решении, а после трех +запусков — сообщение о том, что задание выполнено:

@@ -212,48 +212,48 @@ writeln('MAX=', max:0:2);
-

- , - , . +

В случае успешного прохождения тестового испытания в окно задачника не включается +раздел с примером верного решения, поскольку данные этого раздела совпадают +с результатами, полученными программой.

-. - PascalABC.NET, - , read-write - , - Exam. -, Exam - read-write readln-writeln ( - - «ln», ). -, - Exam , - , . -, - Exam , - ; , , - ( - ). +Примечание. +В системе PascalABC.NET, +благодаря специальному механизму перенаправления данных, стандартные процедуры read-write можно использовать +и при выполнении заданий из других групп, однако важно учитывать ряд особенностей использования этих процедур +в заданиях групп Exam. Во-первых, только в заданиях групп Exam будут проявляться различия в использовании +процедур read-write и readln-writeln (в остальных группах для ввода-вывода можно использовать как вариант +процедуры с суффиксом «ln», так и вариант без этого суффикса). Во-вторых, только в заданиях +групп Exam можно при необходимости использовать атрибуты форматирования при выводе результатов, +а также выводить дополнительные комментарии, если этого требует условие задачи. В-третьих, +только в заданиях групп Exam можно вводить и выводить элементы данных несколькими способами, с использованием переменных +различных типов; например, исходную строку можно либо сразу прочесть в строковую переменную, либо вводить +посимвольно в цикле (в других группах заданий проводится более строгая проверка на соответствие типа переменной +типу элемента исходных или результирующих данных).


-

2. +

Пример 2. Ввод и вывод массивов


-

ExamBegin, - . +

Рассмотрим еще одно задание группы ExamBegin, особенностью которого является вывод в качестве результата +элементов двумерного массива.

-

ExamBegin28°. M N, - — D, — M . - M × N, - , - D ( - ). , - 7 . +

ExamBegin28°. На вход в первой строке подаются два целых положительных числа M и N, +во второй строке — вещественное число D, а в третьей строке — набор из M вещественных чисел. +Сформировать и вывести двумерный вещественный массив размера M × N, у которого первый +столбец совпадает с исходным набором чисел, а элементы каждого следующего столбца равны сумме соответствующего +элемента предыдущего столбца и числа D (в результате каждая строка массива будет содержать +элементы арифметической прогрессии). Каждую строку элементов массива выводить на новой экранной строке, +для каждого числа отводить 7 экранных позиций.

-

-, , : +

При запуске программы-заготовки, созданной для этого задания, окно задачника примет следующий вид:

@@ -261,36 +261,36 @@ writeln('MAX=', max:0:2);
-

, , 8 , - . - , «» , - . , , - , , -( , ). - ; Ins - ( , ). - , :

+

Анализируя исходные данные, можно заметить, что полученная матрица должна иметь 8 строк, тогда как +на экране отображаются только первые пять. +Это связано с тем, что по умолчанию используется режим «свернутого» отображения данных, при котором +на экране выводится только несколько начальных строк. Признаком того, что имеются данные, +не выведенные на экране, является кнопка, которая отображается в правом верхнем углу раздела исходных данных +(на этой кнопке изображается стилизованная стрелка, направленная вниз). +Для вывода всех данных достаточно нажать эту кнопку; можно также нажать клавишу Ins или выполнить +щелчок мышью в любом месте раздела с данными задания (кроме раздела, содержащего формулировку). +Если выполнить эти действия для нашего окна, то оно изменится следующим образом:

-

, Ins ( -, — . ) «» - . , «» , - .

+

Повторный щелчок мышью, нажатие клавиши Ins или кнопки (на которой в данной ситуации будет отображаться +стрелка, направленная вверх — см. рисунок) восстанавливает «сокращенное» +отображение данных. Заметим, что в режиме «сокращенного» отображения нумеруется только первая строка данных, +а в режиме полного отображения нумерацией снабжаются все строки.

- , - , , , . +Дополнительные возможности, связанные с просмотром +данных большого размера, будут описаны далее, в пункте, посвященном задачам повышенной сложности.

-

, , - . +

Если закрыть окно задачника, находясь в режиме отображения всех данных, +то при последующих запусках программы окно будет сразу отображаться в этом режиме.

-

( , - 10 ; - - ExamBegin): +

Приведем вариант правильного решения данной задачи (в этом варианте учитывается, что результирующий +двумерный массив имеет не более 10 строк и столбцов; соответствующее условие приведено в +преамбуле к описанию +группы ExamBegin):

uses PT4Exam;
@@ -315,67 +315,67 @@ writeln('MAX=', max:0:2);
 end.
 
-

-. - , . -, - d , - m n ( -). -, - read «ln», . +

В приведенном решении следует обратить особое внимание на организацию ввода-вывода. +Укажем две особенности, связанные с вводом. Во-первых, несмотря +на то что по условию число d находится во второй строке, мы смогли включить его в один список с +предшествующими числами m и n (поскольку при чтении числовых данных переход на новую строку выполняется +автоматически). Во-вторых, при чтении элементов исходного набора необходимо использовать вариант +процедуры read без суффикса «ln», чтобы не пропустить оставшиеся в этой строке числа.

-

: - , , - . - -writeln . +

При выводе полученного двумерного массива необходимо обеспечить его правильное форматирование: +каждый элемент должен выводиться на семи экранных позициях с двумя дробными знаками и, кроме того, +каждая строка массива должна выводиться на новой экранной строке. Это достигается за счет использования +соответствующих атрибутов форматирования и явного перехода на новую строку с помощью процедуры +writeln без параметров.

-. -, Matrix, - , - , . - , ExamBegin « » , - , - . +Примечание. +Заметим, что в заданиях группы Matrix, +также посвященной обработке двумерных массивов, специальные действия по форматированию полученных массивов +выполнять не требуется, так как задачник автоматически форматирует все полученные результаты. +Таким образом, задания группы ExamBegin «более приближены» к реальной экзаменационной ситуации, +в которой программа учащегося должна не только обрабатывать исходные данные, но и обеспечивать наглядное +отображение результатов.


-

3. +

Пример 3. Обработка сложных наборов данных


-

ExamTaskC 100 , , - - ( C4). - () - . - ; - , , - / . - ExamTaskC -( ). +

Группа ExamTaskC содержит 100 типовых заданий, аналогичных заданиям, +которые предлагаются на ЕГЭ по информатике +в качестве задач повышенной сложности (задача C4). Основную часть данной группы составляют +задания на обработку сложных наборов данных (записей) с элементами-полями различных типов. +В подобных заданиях требуется правильно выбрать способ хранения данных и организовать их эффективную обработку; +при этом обычно требуется применить несколько базовых алгоритмов, например, алгоритм суммирования +или нахождения минимума/максимума и алгоритм поиска нужного элемента или сортировки набора данных по требуемому ключу. +В группу ExamTaskC включены также задания повышенной сложности на обработку текстовых данных +(подобные задания содержатся в завершающем разделе данной группы).

-

, - , Programming Taskbook, - , , , - C. +

Следует заметить, что возможность автоматической генерации +больших наборов исходных данных, предоставляемая задачником Programming Taskbook, позволяет существенно ускорить +тестирование учебных программ и сделать его более надежным, что, в свою очередь, повышает эффективность изучения +типовых приемов решения задач группы C.

-

ExamTaskC , - ExamBegin. +

В заданиях группы ExamTaskC ввод и вывод имеет те же особенности, +что и в заданиях группы ExamBegin.

-

. +

Рассмотрим следующее задание.

-

ExamTaskC25°. . -  N, N  -
< > < > <>
- , 1990 2010. , - , , -( , ). - .

+

ExamTaskC25°. На вход подаются сведения об абитуриентах. В первой строке +указывается количество абитуриентов N, каждая из последующих N строк имеет +формат
<Номер школы> <Год поступления> <Фамилия>
+Номер школы содержит не более двух цифр, годы лежат в диапазоне от 1990 до 2010. Для каждого года, +присутствующего в исходных данных, вывести общее число абитуриентов, поступивших в этом году +(вначале выводить год, затем число абитуриентов). Сведения о каждом годе выводить на новой строке +и упорядочивать по возрастанию номера года.

-

-, , ExamBegin, - PT4Exam: +

Программа-заготовка, созданная для этого задания, подобно заготовкам для заданий группы ExamBegin, +будет использовать специальный модуль PT4Exam:

uses PT4Exam;
@@ -386,49 +386,49 @@ writeln('MAX=', max:0:2);
 end.
 
-

, : +

При запуске этой программы на экране появится окно задачника, содержащее следующие данные:

-

, - . - ; - ( - Ctrl+Up Ctrl+Down). +

Окно будет иметь такой вид, если при его предшествующем закрытии оно находилось в режиме +отображения всех данных. +Для отображения всех данных на экране может потребоваться увеличить высоту окна; для этого достаточно +зацепить мышью заголовок окна и переместить его вверх (для перемещения заголовка окна задачника вверх и вниз +можно также воспользоваться клавиатурными комбинациями Ctrl+Up и Ctrl+Down).

-

- ( 10–20 ). +

При первом тестовом испытании программы ей будет предложен для обработки +набор данных не слишком большого размера (порядка 10–20 элементов).

-

, . - , , - year, . Pascal - , , - : 1990..2010. , - 0 -(, year - , , , - ). +

Вначале следует определиться со структурами данных, которые будут использоваться в программе. Поскольку +требуется найти одну характеристику для каждого года, а число лет невелико, можно использовать +числовой массив year, каждый элемент которого соответствует определенному году. Так как в языке Pascal можно +использовать произвольные границы индексов, удобно в качестве диапазона индексов указать диапазон лет, +который требуется проанализировать: 1990..2010. В начале программы выполним инициализацию элементов массива, +положив их значения равными 0 +(заметим, что если после обработки исходных данных некоторые элементы массива year +останутся нулевыми, то это будет означать, что соответствующие годы не были представлены в наборе исходных данных, +и выводить информацию о них не следует).

-

, - - year. , - (, ) . , - , , - (). - , , - . +

После инициализации массива следует прочесть информацию о количестве абитуриентов и организовать цикл, +в котором будут обрабатываться данные о каждом абитуриенте и соответствующим образом корректироваться +элементы массива year. В дальнейшем сведения об уже обработанном абитуриенте нам не будут нужны, поэтому сохранять +их в специальном наборе данных (например, массиве) не требуется. Заметим также, что фамилия абитуриента +для решения задачи не требуется, поэтому после чтения двух числовых данных можно сразу переходить к новой строке, +пропуская строковый элемент данных (фамилию). В задаче не нужно использовать +и номера школ, однако их придется считывать, так как только после номера школы указывается интересующий +нас год поступления абитуриента.

-

, - year , - , . +

Когда данные обо всех абитуриентах будут обработаны, +в массиве year будет содержаться вся необходимая информация, которую останется +вывести в формате, указанном в условии задачи.

-

( ): +

Приведем первый вариант решения (этот вариант содержит одну ошибку):

uses PT4Exam;
@@ -442,7 +442,7 @@ writeln('MAX=', max:0:2);
   readln(n);
   for i := 1 to n do
   begin
-    readln(k, m); { k -  , m -   }
+    readln(k, m); { k - номер школы, m - год поступления }
     Inc(year[m]);
   end;
   for i := 1990 to 2010 do
@@ -450,17 +450,17 @@ writeln('MAX=', max:0:2);
 end.
 
-

, , . - , - -( , - ): +

Ошибка связана с тем, что на экран выводится информация о годах, отсутствующих в наборе исходных данных. +Поэтому она сразу будет выявлена при обработке наборов данных небольшого размера, +предлагаемых программе при первом тестовом запуске +(для большей наглядности приведем окно задачника в режиме сокращенного отображения данных, при котором +выводятся только пять первых элементов из каждого набора данных):

-

: +

Для исправления ошибки достаточно добавить в последний цикл условный оператор:

for i := 1990 to 2010 do
@@ -469,129 +469,129 @@ writeln('MAX=', max:0:2);
 
-

9 , , , - . +

Теперь все 9 тестовых испытаний программы, требуемых для того, чтобы решение было зачтено как выполненное, +будут пройдены успешно.

-

, , - . +

Завершая рассмотрение этого задания, опишем некоторые дополнительные возможности, связанные +с просмотром больших наборов данных.

-

, - ( 50–100 -). , . - , - , . - , - , PgUp, PgDn, Home, End, . +

Начиная со второго испытания, +программе может быть предложен для обработки набор исходных данных большего размера (порядка 50–100 +элементов). При этом уже не удастся отобразить на экране все данные, связанные с заданием. +В подобной ситуации у правой границы окна задачника появится полоса прокрутки, позволяющая +перемещаться к той части данных, которая первоначально не отображается на экране. +Прокрутку данных можно выполнять не только с помощью полосы прокрутки, но и используя +клавиши со стрелками, PgUp, PgDn, Home, End, а также колесико мыши.

-

, -«» , - , - . - [+] ( Ctrl+PgDn), -— [–] ( Ctrl+PgUp). - [/] -( Ctrl+Tab). ; - , -( - , , , ). - : +

Помимо стандартных действий по прокрутке данных, в окне задачника предусмотрены возможности +«интеллектуальной» прокрутки, +позволяющие быстро перейти к началу каждого раздела задания, а также сравнить соответствующие фрагменты +полученных результатов и примера верного решения. Для циклического перебора разделов сверху вниз +предназначена клавиша [+] (а также комбинация Ctrl+PgDn), для циклического перебора разделов снизу вверх +— клавиша [–] (а также комбинация Ctrl+PgUp). Для быстрого переключения между +соответствующими фрагментами разделов с результатами и с примером верного решения предназначена клавиша [/] +(а также комбинация Ctrl+Tab). Все эти действия можно выполнить и с помощью мыши; для этого +предусмотрены кнопки в левом верхнем углу прокручиваемой области окна, отведенной под отображение разделов задания +(эти кнопки отображаются +на экране, если размер данных, связанных с заданием, превышает размеры окна). +Приведем вид окна задачника с полосой прокрутки и дополнительными кнопками:

-

, - ; . +

Обозначения на кнопках совпадают с клавишами, +выполняющими те же действия; при наведении мышью на кнопку рядом с ней появляется всплывающая подсказка.

-

, «» , - . - - ( ) - ( Del - ). - . - , - . , - . , - , ( ), -, , - ( , ) . +

Кроме трех кнопок, связанных с «интеллектуальной» прокруткой, +в приведенном на рисунке окне отображаются еще две дополнительные кнопки. +Первая из них располагается в правом верхнем углу раздела с формулировкой +и позволяет временно скрыть (а в дальнейшем опять отобразить) +раздел с формулировкой (эти же действия можно выполнить с помощью клавиши Del или щелчка мышью +на разделе с формулировкой). +Вторая дополнительная кнопка расположена в правом верхнем углу раздела с исходными данными. +Как уже отмечалось ранее, эта кнопка позволяет переключаться между полным +и сокращенным отображением наборов данных. Напомним, что +изображение на этой кнопке показывает текущий режим отображения данных. Например, если на кнопке изображена +стилизованная стрелка, направленная вверх (как на приведенном выше рисунке), +значит, в данный момент в окне отображаются все данные, а нажатие на эту кнопку переведет окно +в режим отображения нескольких начальных (как правило, пяти) элементов каждого набора данных.

-

- -, . +

Дополнительная информация о возможностях +режима окна с динамической компоновкой приведена в соответствующем разделе +страницы, посвященной описанию окна задачника.


-

4. +

Пример 4. Более сложное задание на обработку наборов данных


-

ExamTaskC53°. (). -  M , -  N, N 
-< > <> <> < 1 ( )>
- 20 30 ; - . 92, 95 98. -  2000  3000. ; - . , -  M, ( -, ). - , — . -  M , «». +

ExamTaskC53°. На вход подаются сведения о ценах на бензин на автозаправочных станциях (АЗС). +В первой строке содержится значение M одной из марок бензина, во второй строке указывается +целое число N, а каждая из последующих N строк имеет формат
+<Марка бензина> <Улица> <Компания> <Цена 1 литра (в копейках)>
+Имеется не более 20 различных компаний и не более 30 различных улиц; названия компаний и улиц +не содержат пробелов. В качестве марки бензина указываются числа 92, 95 или 98. Цена задается целым числом +в диапазоне от 2000 до 3000. Каждая компания имеет не более одной АЗС на каждой улице; +цены на разных АЗС одной и той же компании могут различаться. Для каждой улицы, на которой имеются +АЗС с бензином марки M, определить максимальную цену бензина этой марки (вначале выводить максимальную +цену, затем название улицы). Сведения о каждой улице выводить на новой строке и упорядочивать +по возрастанию максимальной цены, а для одинаковой цены — по названиям улиц в алфавитном порядке. +Если ни одной АЗС с бензином марки M не найдено, то вывести текст «Нет».

-

, - -( ; , - «» , - ): +

Приведем окно задачника, которое появится на экране при запуске программы-заготовки для данного задания +(в данном окне скрыт раздел с формулировкой; в результате оказались скрытыми и кнопки, +отвечающие за «интеллектуальную» прокрутку, поскольку в окне полностью отображается +содержимое оставшихся разделов):

-

, , . - , , 30, - : M. - 30 - , : , — - . , , - , - . +

Выясним, какая структура является наиболее подходящей для хранения информации, необходимой для решения задачи. +Нам требуется информация, связанная с различными улицами, которых по условию не более 30, причем для каждой улицы +надо хранить сведения двух видов: ее название и максимальную цену бензина марки M. Поэтому мы можем либо завести +массив из 30 элементов-записей с двумя полями, либо два массива: один содержащий названия улиц, а другой — +максимальные цены. Учитывая, что в конце программы нам потребуется выполнять сортировку полученных данных, +целесообразнее использовать массив записей, поскольку это позволит записать алгоритм сортировки +в более компактной форме.

-

Street name max s - 30 Street. - ns, s. +

Определим запись Street с двумя полями name и max и опишем массив s +из 30 элементов типа Street. +Следует также завести переменную ns, в которой будет храниться количество заполненных элементов массива s.

-

. - M, , - . M, s0 p. -, , , - — . +

При обработке каждой строки с исходными данными нам будут нужны прежде всего сведения о марке бензина. +Если марка бензина не равна M, то оставшуюся часть строки обрабатывать не требуется, и можно сразу перейти +к разбору следующей строки. Если марка бензина равна M, то необходимо узнать название улицы s0 и цену бензина p. +Заметим, что название компании для решения задачи не требуется, однако его необходимо прочесть, чтобы определить +следующий элемент данных — цену бензина.

-

s0 s, , - max p. , max - p, max ( - ). +

Если улица с названием s0 еще не была включена в массив s, то ее необходимо включить в массив, присвоив +полю max значение p. Если же улица уже присутствует в массиве, то необходимо сравнить поле max для данной улицы +и значение p, изменив при необходимости поле max (здесь мы используем базовый алгоритм нахождения +максимального значения).

-

; - . +

Для ввода названий улиц и компаний в нашем случае удобно организовать посимвольное чтение строковых данных; +признаком завершения такого чтения будет обнаружение пробельного символа.

-

, , - M ( ns ). - , «»; - s . - , , -, . +

После обработки набора исходных данных необходимо проверить, найдена ли хотя бы одна улица с АЗС, +предлагающей марку бензина M (для этого достаточно сравнить значение ns с нулем). Если ни одна улица +не найдена, то надо вывести строку «Нет»; в противном случае требуется выполнить сортировку +массива s по указанному набору ключей и вывести полученные данные в требуемом порядке. Поскольку размер +массива невелик, для его сортировки вполне допустимо использовать один из простых алгоритмов, +например, алгоритм пузырьковой сортировки.

-

: +

Приведем один из вариантов правильного решения задачи:

uses PT4Exam;
@@ -608,39 +608,39 @@ writeln('MAX=', max:0:2);
   c: char;
 begin
   Task('ExamTaskC53');
-  readln(m); { m -   }
+  readln(m); { m - марка бензина }
   readln(n);
   ns := 0;
   for i := 1 to n do
   begin
     read(k);
     if k <> m then
-      readln {     }
+      readln { пропускаем оставшуюся часть строки }
     else
     begin
       s0 := '';
-      read(c); {      }
-      read(c); {      }
+      read(c); { пропускаем пробел после первого числа }
+      read(c); { читаем первый символ названия улицы }
       while c <> ' ' do
       begin
         s0 := s0 + c;
         read(c);
       end;
-      read(c); {      }
+      read(c); { читаем первый символ названия компании }
       while c <> ' ' do
-        read(c); {     }
-      readln(p); {         }
-      {    }
+        read(c); { название компании не сохраняем }
+      readln(p); { читаем цену бензина и переходим на новую строку }
+      { Обработка прочитанной информации }
       k := 0;
       for j := 1 to ns do
-        if s[j].name = s0 then {      s }
+        if s[j].name = s0 then { улица уже содержится в массиве s }
         begin
           k := 1;
           if s[j].max < p then
             s[j].max := p;
           break;
         end;
-      if k = 0 then {       s }
+      if k = 0 then { улица еще не содержится в массиве s }
       begin
         Inc(ns);
         s[ns].name := s0;
@@ -648,12 +648,12 @@ writeln('MAX=', max:0:2);
       end;
     end;
   end;
-  if ns = 0 then {      }
-    writeln('')
+  if ns = 0 then { ни одной улицы не найдено }
+    writeln('Нет')
   else
   begin
-    {     ,
-          -    }
+    { Сортировка по возрастанию максимальной цены,
+      а для одинаковых цен - по названиям улиц }
     for k := 1 to ns - 1 do
       for i := 1 to ns - k do
         if (s[i].max > s[i + 1].max) or
@@ -664,7 +664,7 @@ writeln('MAX=', max:0:2);
           s[i] := s[i + 1];
           s[i + 1] := x;
         end;
-    {      }
+    { Вывод результатов в требуемом порядке }
     for i := 1 to ns do
       writeln(s[i].max,' ',s[i].name);
   end;
diff --git a/PABCNetHelp/ForEducation/CheckedTasks/ctfile.html b/PABCNetHelp/ForEducation/CheckedTasks/ctfile.html
index ce8d6c601..979cc5c2c 100644
--- a/PABCNetHelp/ForEducation/CheckedTasks/ctfile.html
+++ b/PABCNetHelp/ForEducation/CheckedTasks/ctfile.html
@@ -7,17 +7,17 @@
 
 
 
-

+

Задание на обработку файлов


-

-

+

Создание программы-заготовки и знакомство с заданием

-

File48.

-

, - - - « | », - - Shift+Ctrl+L. : +

В качестве примера задания на обработку файлов рассмотрим задание File48.

+

Напомним, что программу-заготовку для решения этого задания можно создать с помощью +команды +меню «Модули | Создать шаблон программы», кнопки + или клавиатурной +комбинации Shift+Ctrl+L. Эта заготовка будет иметь следующий вид:

@@ -30,36 +30,36 @@ end.
-

:

+

После запуска данной программы на экране появится окно задачника:

-

(SA, SB - SC) (SD). - . - , ( ) - (- ).

-

, , , - , - - . - , ( 1).

-

( ), - . - , - , . . , - .

+

В первой строке раздела исходных данных указаны имена трех исходных файлов (SA, SB +и SC) и одного результирующего (SD). В последующих строках раздела исходных данных +показано содержимое исходных файлов. +Элементы файлов отображаются бирюзовым цветом, чтобы подчеркнуть их отличие от обычных исходных данных (желтого цвета) +и комментариев (светло-серого цвета).

+

Поскольку размер файлов, как правило, превышает количество элементов, +которое может уместиться на одной экранной строке, +для отображения содержимого файла может отводиться +более одной экранной строки. Слева от каждой строки с содержимым файла указывается порядковый номер +файлового элемента, значение которого указано первым в этой строке (элементы нумеруются от 1).

+

Запуск нашей программы признан ознакомительным (и поэтому правильность решения не анализировалась), +так как в ходе ее выполнения не было введено ни одного элемента исходных данных. +При ознакомительном запуске раздел результатов не отображается, однако приводится +пример верного решения, т. е. те числа, +которые должны содержаться в результирующем файле при правильной обработке исходных файлов.


-

-

, - . , - :

+

Ввод части исходных данных

+

Добавим в программу фрагмент, позволяющий ввести имена исходных файлов и связать с этими файлами соответствующие +файловые переменные. Поскольку мы собираемся работать с четырьмя файлами одного типа, удобно предусмотреть массив +для хранения всех файловых переменных:

@@ -79,44 +79,44 @@
 
-

, . - s, , - s, - ( Assign) - - , .

-

, - . , - « »:

+

Мы намеренно ограничились тремя итерациями цикла, оставив непрочитанным имя результирующего файла. +Считывание имен файлов производится в одну и ту же переменную s, поскольку после связывания файла, +имеющего имя s, +с соответствующей файловой переменной (процедурой Assign) все остальные действия +с данным файлом в нашей программе +будут осуществляться с использованием файловой переменной, без обращения к имени файла.

+

Запуск нового варианта программы уже не будет считаться ознакомительным, поскольку в программе +выполняется ввод исходных данных. Так как имя результирующего файла осталось непрочитанным, этот вариант +решения будет признан неверным и приведет к сообщению «Введены не все требуемые исходные данные»:

-

( ), - . -( ) - . , -( ) : - . - , , - , - ; - . ( , ) - . +

При этом на экране появится раздел результатов (кроме комментария он пока ничего не содержит), +а также панель индикаторов. Первый из индикаторов +(индикатор ввода) показывает +количество введенных исходных данных. Обратите внимание на то, что второй индикатор +(индикатор вывода) является неактивным: он выделяется серым цветом более светлого +оттенка и не содержит текстового заголовка. +Это объясняется тем, что индикатор вывода показывает количество результирующих данных, +полученных задачником от программы, а в нашем случае программа +не должна передавать задачнику никакие данные; вместо этого ей необходимо создать файл и заполнить его +требуемыми значениями. Для заданий подобного типа (обычно это задания, связанные с обработкой файлов) +индикатор вывода не используется.


-

-

, 3 4, . , - , ( ). , - . « »:

+

Ввод всех исходных данных без создания требуемого файла

+

Изменим программу, заменив в заголовке цикла число 3 на 4, и вновь запустим программу. Теперь все данные, +необходимые для выполнения задания, введены в программу (это видно по индикатору ввода). Однако задание не выполнено, поскольку результирующий файл +не создан. Поэтому решение опять признано ошибочным с диагностикой «Результирующий файл не найден»:


-

,

-

Assign Reset, :

+

Пример программы, приводящей к ошибке времени выполнения

+

Добавим в тело цикла после процедуры Assign вызов процедуры Reset, обеспечивающий открытие существующего файла:

 uses PT4;
@@ -135,28 +135,28 @@
 end.  
-

«Error System.IO.FileNotFoundException»:

+

Теперь запуск программы приведет к сообщению об ошибке «Error System.IO.FileNotFoundException»:

-

, Error, , -(Runtime Error). Error ( System.IO.FileNotFoundException, - -, , ) - .

+

Сообщение, начинающееся со слова Error, означает, что при работе программы произошла ошибка времени выполнения +(Runtime Error). После слова Error указывается имя этой ошибки (в данном случае System.IO.FileNotFoundException, +то есть ошибка ввода-вывода, связанная с тем, что файл не найден) +и краткое ее описание на английском языке.

-

« » - PascalABC.NET:

+

Сообщение об ошибке времени выполнения появится и в разделе «Список ошибок» +окна PascalABC.NET:


-

-

, - Reset, Rewrite, - . , , , - Close. :

+

Создание пустого результирующего файла

+

Для того чтобы избежать ошибки времени выполнения, отсутствующий файл результатов следует открыть +не процедурой Reset, а процедурой Rewrite, которая +и обеспечит создание этого файла. Далее, после завершения работы с файлами, открытыми в программе, +их необходимо закрыть процедурой Close. Добавим в программу соответствующие операторы:

 uses PT4;
@@ -179,28 +179,28 @@
 end.  
-

{ * } , - - : Reset Rewrite Close.

-

; , . - , . - « », - , , EOF: ( EOF - , , ):

+

Комментарий { * } расположен в том месте программы, в котором можно выполнять операции ввода-вывода для всех +четырех файлов: они уже открыты процедурами Reset или Rewrite и еще не закрыты процедурой Close.

+

Запуск этого варианта программы не приведет к ошибке времени выполнения; более того, результирующий файл будет создан. +Однако созданный файл останется пустым, то есть не содержащим ни одного элемента. Поэтому при запуске программы +на информационной панели появится сообщение «Ошибочное решение», +а в строке, которая должна содержать элементы результирующего файла, появится текст EOF: (особое значение EOF для +указателя текущей файловой позиции означает, что данный файл существует, но не содержит ни одного элемента):


-

,

-

- . - : file of integer , -, file of real, .

-

, - - . , : - f integer real, - a real, ( , { * }) - :

+

Пример программы, использующей неправильные типы для файловых данных

+

Во всех ранее рассмотренных вариантах программы мы не использовали операции ввода-вывода для файлов. +Поэтому тип файлов не играл никакой роли: вместо типа file of integer мы могли использовать любой другой файловый тип, +например, file of real, и результат выполнения программы был бы тем же самым.

+

Тип файловых элементов становится принципиально важным, если в программе используются операции ввода-вывода +для данного файла. Чтобы продемонстрировать это на примере нашей программы, внесем в нее следующие изменения: +в описании массива f файловых переменных тип integer заменим на real, в раздел описаний добавим описание +переменной a типа real, в раздел операторов (в позицию, помеченную комментарием { * }) +добавим следующий фрагмент:

 for i := 1 to 3 do
@@ -210,32 +210,32 @@
 end;
 
-

- ( ). , - ; , , - .

-

:

+

Данный фрагмент обеспечивает считывание одного элемента для каждого из трех исходных файлов +и запись этих элементов в результирующий файл (в требуемом порядке). Подчеркнем, что мы неправильно указали +типы файлов; тем не менее, компиляция программы пройдет успешно, а после ее запуска не произойдет +ошибок времени выполнения.

+

Результат работы программы будет неожиданным:

-

, , , - . , - file of real -( 8 ), « », , - ( 4 ). - « » 8 , - .

-

, , , , - . , «» - .

+

Судя по экранной строке с содержимым результирующего файла, в него будут записаны не три, а шесть элементов, +по два начальных элемента из каждого исходного файла. Объясняется это тем, что после связывания файлов +с файловыми переменными типа file of real элементами файлов стали считаться вещественные числа +(занимающие в памяти по 8 байтов), тогда как «на самом деле», то есть по условию задания, элементами файлов +являются целые числа (занимающие в памяти по 4 байта). Поэтому считывание из файла и последующая запись в файл +одного «вещественного элемента» фактически приводит к считыванию и записи блока данных размером 8 байтов, +содержащего два последовательных целочисленных элемента исходного файла.

+

Итак, мы выяснили, что ошибки, связанные с несоответствием типов файлов, не выявляются при компиляции +и не всегда приводят к ошибкам времени выполнения. Это следует иметь в виду, и при появлении «странных» +результирующих данных начинать поиск ошибки с проверки типов файловых переменных.


-

,

-

real integer:

+

Исправление ошибки, связанной с неверными типами файловых данных

+

Заменим в нашей программе все описания real на integer:

 uses PT4;
@@ -264,8 +264,8 @@
 
-

, «» : - ( «»), :

+

Мы получим все еще неверное, но вполне «понятное» решение: первые три элемента результирующего файла +совпадают с контрольными (то есть «правильными»), а прочие элементы отсутствуют:

@@ -273,8 +273,8 @@
-

-

, , +

Верное решение

+

Приведем, наконец, верное решение задания File48:

@@ -303,11 +303,11 @@
 end.  
-

while not Eof(f[1]) do, - (, - ) . - « . 1 ( 5)», - — « !»:

+

От предыдущего варианта данное решение отличается добавлением заголовка цикла while not Eof(f[1]) do, +который обеспечивает считывание всех элементов из исходных файлов (напомним, что по условию задания все исходные +файлы имеют одинаковый размер) и запись их в результирующий файл в нужном порядке. +После запуска этого варианта мы получим сообщение «Верное решение. Тест номер 1 (из 5)», +а после пяти подобных запусков — сообщение «Задание выполнено!»:

@@ -315,26 +315,26 @@
-

-

« (F2)», - , F2, , - :

+

Просмотр результатов выполнения задания

+

Щелкнув мышью на метке «Результаты (F2)», расположенной в правом верхнем +углу окна задачника, или нажав клавишу F2, мы можем вывести на экран окно результатов, +в котором будет перечислены все наши попытки решения задачи:

-File48    a08/09 12:43  .
-File48    a08/09 12:50      .
-File48    a08/09 12:52    .
+File48    a08/09 12:43 Ознакомительный запуск.
+File48    a08/09 12:50 Введены не все требуемые исходные данные.
+File48    a08/09 12:52 Результирующий файл не найден.
 File48    a08/09 12:53 Error System.IO.FileNotFoundException.
-File48    a08/09 12:57  .--3
-File48    a08/09 13:06  !
+File48    a08/09 12:57 Ошибочное решение.--3
+File48    a08/09 13:06 Задание выполнено!
 
-

Esc. - PascalABC.NET. - « | », - - Shift+Ctrl+R. +

Для закрытия окна результатов достаточно нажать клавишу Esc. +Окно результатов можно отобразить на экране и после закрытия окна задачника и возврата в среду PascalABC.NET. +Для этого надо использовать команду меню «Модули | Просмотреть результаты», кнопку + или клавиатурную +комбинацию Shift+Ctrl+R.

diff --git a/PABCNetHelp/ForEducation/CheckedTasks/ctpointer.html b/PABCNetHelp/ForEducation/CheckedTasks/ctpointer.html index eef0abcc1..82def7002 100644 --- a/PABCNetHelp/ForEducation/CheckedTasks/ctpointer.html +++ b/PABCNetHelp/ForEducation/CheckedTasks/ctpointer.html @@ -7,19 +7,19 @@ -

+

Задания на указатели и динамические структуры данных


-

1.

+

Пример 1. Анализ существующей динамической структуры


-

Dynamic : , - - TNode, PNode TNode: -PNode = ^TNode. TNode PNode ; - Programming Taskbook ( TNode, - Dynamic):

+

В заданиях группы Dynamic мы встречаемся с двумя новыми видами данных: это динамические структуры, +реализованные в виде цепочек связанных друг +с другом записей типа TNode, и указатели типа PNode на записи TNode: +PNode = ^TNode. Типы TNode и PNode не являются стандартными типами языка Паскаль; +они определены в задачнике Programming Taskbook следующим образом (приводятся только те поля записи TNode, которые +используются при выполнении заданий группы Dynamic):

 type
@@ -32,16 +32,16 @@
   end;
 
-

Dynamic2 , - .

+

На примере задания Dynamic2 рассмотрим особенности, связанные с +использованием этих новых типов данных.


-

-

+

Создание программы-заготовки и знакомство с заданием

-

- Dynamic2, - « | », - - Shift+Ctrl+L, :

+

Программа-заготовка для задания Dynamic2, созданная с помощью команды +меню «Модули | Создать шаблон программы», кнопки + или клавиатурной +комбинации Shift+Ctrl+L, имеет следующий вид:

@@ -54,80 +54,80 @@
 
-

:

+

После запуска данной программы на экране появится окно задачника:

-

: .

+

Это окно содержит в качестве исходных и результирующих данных новые элементы: динамические структуры и указатели.

-

, . - ; , , - — , Data - . ( ).

+

Начнем с описания того, как отображается на экране динамическая структура. Для ее вывода используются две +экранные строки; в первой строке отображаются имена указателей, связанных с данной структурой, +а во второй — содержимое элементов этой структуры, то есть значения их полей Data и способ связи +между ними. Вся информация о динамической структуре отображается бирюзовым цветом (подобно информации об элементах файлов).

-

, :

+

Рассмотрим в качестве примера динамическую структуру, указанную на рисунке:

  P1
  75 - 65 - 22 - 26 - 10 >nil
 
-

, 5 , Data, - 75, Next , Data - 65, , , Data 10, - Next nil, . - , , , - :

+

Этот текст означает, что структура состоит из 5 элементов, причем ее первый элемент имеет поле Data, +равное 75, и связан с помощью своего поля Next со вторым элементом, поле Data +которого равно 65, и так далее до последнего, пятого элемента, поле Data которого равно 10, +а поле Next равно nil, что является признаком завершения структуры. +Таким образом, текст, описывающий данную динамическую структуру, является максимально упрощенным вариантом +следующей схемы:

-

, , - ( , - ).

-

? . - , - . , - , , - , .

-

, , , - P1, .

+

Поскольку эта структура указана в разделе исходных данных, следовательно, после инициализации задания +она уже существует и размещается в некоторой области динамической памяти (подобно тому, как исходные файлы +после инициализации задания размещаются в каталоге учащегося).

+

Как получить доступ к этой существующей динамической структуре? Здесь также уместна аналогия с файлами. +Для доступа к внешнему файлу необходимо знать его имя, и в любом задании на обработку файлов +имена исходных файлов входят в набор исходных данных. Для доступа к данным, +размещенным в динамической памяти, необходимо знать их адрес, и поэтому в любом задании на +обработку динамических структур в набор исходных данных входят указатели, содержащие адреса этих структур.

+

Из текста, описывающего динамическую структуру, видно, что на ее первый элемент указывает указатель +с именем P1, который также содержится в наборе исходных данных. Описание этого указателя имеет вид

 P1 = ptr
 
-

P1 = , , -- , ptr , , - read.

-

. : «ptr» «» -( )? , , , - , , .

-

, ptr , - , ( nil). -, , - . -, «» , - .

-

, ( ) -, , - ( write). - , .

+

Здесь текст P1 = является комментарием и выделяется, как обычный комментарий, +светло-серым цветом, а текст ptr означает, что этот элемент исходных данных является указателем, +который надо ввести в программу с помощью процедуры ввода read.

+

Замечание. Может возникнуть вопрос: почему вместо условного текста «ptr» не отображается «настоящее» значение указателя +(то есть некоторый четырехбайтный адрес)? Это связано с тем, что, даже выведя это значение на экран, +мы не сможем определить, с какими данными связан этот адрес, поэтому подобная информация на экране будет излишней.

+

Итак, слово ptr в разделе исходных или результирующих данных означает, что соответствующий элемент данных +является указателем, причем непустым (для пустого указателя используется слово nil). +Определить, с каким элементом динамической структуры данных связан непустой указатель, можно по экранной +информации об этой динамической структуре. +Разумеется, при чтении указателя программа учащегося получит «настоящий» адрес, с помощью которого она сможет +обратиться к исходной динамической структуре.

+

Аналогично, создав (или преобразовав) некоторую динамическую +структуру, программа учащегося должна передать задачнику некоторый адрес, +связанный в этой структурой (используя процедуру вывода write). +Зная этот адрес, задачник сможет проверить правильность созданной структуры.


-

+

Приступаем к решению

-

-Dynamic2. , ; - , - , , , , - .

-

, , :

+

Вернемся к заданию +Dynamic2. В нем не требуется ни создавать, ни преобразовывать исходную структуру данных; +ее необходимо лишь проанализировать, +а именно, определить значения всех ее элементов, подсчитать количество элементов и, кроме того, +вывести указатель на последний элемент этой структуры.

+

Приведем вначале неполное решение задачи, выводящее все необходимые данные, кроме указателя на последний элемент:

 uses PT4;
@@ -148,36 +148,36 @@ Dynamic2. 
 end.
 
-

, , - - , - , « »:

+

После запуска программы можно убедиться, что все числовые результирующие данные найдены правильно, +однако из-за того, что не выведен указатель +на последний элемент, решение признано ошибочным с диагностикой «Выведены не все результирующие данные»:

-

+

Добавим в конец программы оператор

 write(p1);
 
-

, - nil. - , while p1 , - :

+

После запуска нового варианта программы все требуемые данные будут выведены, однако результирующее значение +указателя будет равно nil. Это связано +с тем, что после завершения цикла while в переменной p1 содержится нулевой указатель, +а не указатель на последний элемент динамической структуры:


-

+

Правильное решение

-

, p2, - , p1. - while - :

+

Для того чтобы получить правильное решение, опишем вспомогательную переменную p2, +в которой будем сохранять адрес элемента, предшествующего элементу с адресом p1. +После завершения цикла while в этой переменной будет храниться адрес последнего элемента +динамической структуры:

 uses PT4;
 var
@@ -191,40 +191,40 @@ write(p1);
   begin
     write(p1^.Data);
     n := n + 1;
-    p2 := p1;       {     }
-    p1 := p1^.Next; {      }
+    p2 := p1;       { сохраняем адрес текущего элемента }
+    p1 := p1^.Next; { и переходим к следующему элементу }
   end;
   write(n, p2);
 end.
 
-

, « !»:

+

Запустив эту программу три раза, мы получим сообщение «Задание выполнено!»:


-

2.

+

Пример 2. Добавление элемента к динамической структуре


-

+

Знакомство с заданием

-

, -: +

Рассмотрим простейшее задание, связанное с добавлением элемента к динамической структуре-стеку: Dynamic3.

-

, , - , , :

+

При ознакомительном запуске этого задания мы обнаружим новое обозначение в тексте, описывающем результирующий стек, +а именно, точки, обрамляющие первый элемент стека:

-

, -( , ).

+

Точки обозначают элементы динамической структуры, память для которых должна быть выделена программой учащегося +(в отличие от тех элементов, которые размещаются в памяти самим задачником).


-

+

Приступаем к решению

-

, ? , , -Dynamic3, , :

+

Что произойдет, если динамическая структура будет создана с ошибками? Для того чтобы это выяснить, вернем в программе, решающей задание +Dynamic3, указатель на прежнюю вершину стека, не добавляя к ней новый элемент:

 uses PT4;
 var
@@ -236,22 +236,22 @@ Dynamic3, 
   write(p1);
 end.
 
-

:

+

После запуска данной программы окно задачника примет вид:

-

, , - , . , , - , ( ) . . , - , , - .

+

Скобки вокруг каждого элемента результирующего стека означают, что эти элементы созданы самим задачником, но располагаются +не на тех позициях, на которых они должны находиться при правильном решении. Действительно, тот элемент, +который в решении является первым, должен (после добавления нового элемента) оказаться вторым и т. д. Итак, +наличие скобок в тексте результирующей динамической структуры означает, что ее элементы располагаются не в том порядке, +который требуется.


-

+

Правильное решение

-

Dynamic3 , - New, , -( , ):

+

Для получения правильного решения задания Dynamic3 необходимо явно выделить память для нового элемента, +используя процедуру New, и заполнить поля этого элемента, связав его с текущей вершиной стека +(в результате сам этот элемент станет новой вершиной, адрес которой и следует вывести):

 uses PT4;
 var
@@ -266,36 +266,36 @@ Dynamic3, 
   write(p2);
 end.
 
-

:

+

Приведем вид окна задачника при первом запуске этой программы:


-

3.

+

Пример 3. Удаление элемента из динамической структуры


-

+

Знакомство с заданием

-

— +

Рассмотрим простейшее задание на удаление элемента из динамической структуры — Dynamic5. - , , - .

-

, - «» - , «», , .

-

-, , ( - 15):

+В нем требуется удалить из стека вершину и вернуть указатель на новую вершину, то есть на элемент, +расположенный непосредственно за удаленным.

+

Особенность заданий на удаление элементов из динамических структур заключается в том, что удаляемый элемент +необходимо не только «отсоединить» +от исходной динамической структуры, но и полностью «уничтожить», то есть освободить память, занимаемую этим элементом.

+

Для того чтобы напомнить учащемуся о необходимости уничтожения некоторых элементов исходной динамической +структуры, эти элементы выделяются на экране синим цветом меньшей яркости, чем обычные элементы (на рисунке +таким способом выделен элемент 15):


-

+

Приступаем к решению

-

, - , :

+

Вначале приведем неправильный вариант решения, в котором +не освобождается память, занимаемая удаленным из стека элементом:

 uses PT4;
 var p1: PNode;
@@ -305,19 +305,19 @@ Dynamic5.
   write(p1^.Data, p1^.Next);
 end.
 
-

-( « » « » ), - « », - , :

+

Несмотря на то что все результирующие данные будут совпадать с контрольными +(то есть текст в разделах «Полученные результаты» и «Пример верного решения» будет одинаковым), на +информационной панели появится сообщение об ошибке «Не освобождена динамическая память», +а в разделе исходных данных будет выделен красным цветом тот элемент, который требовалось удалить:


-

+

Правильное решение

-

- Dispose, , p1:

+

Для получения правильного решения достаточно добавить в конец программы оператор вызова +процедуры Dispose, освобождающий память, на которую указывает указатель p1:

 uses PT4;
 var p1: PNode;
@@ -328,41 +328,41 @@ Dynamic5.
   Dispose(p1);
 end.
 
-

:

+

Приведем вид окна задачника при первом запуске этой программы:


-

4.

+

Пример 4. Двусвязные динамические структуры


-

-

+

Знакомство с заданием

+

Особенности работы с двусвязными динамическими структурами рассмотрим на примере задания Dynamic30, - . -, - , «» , - :

+в котором требуется преобразовать исходную односвязную структуру в двусвязную. Запустив программу-заготовку, +созданную для этого задания, мы увидим в области исходных данных информацию об «обычной» односвязной структуре, +подобной рассмотренным в предыдущих примерах:

-

, , : --, =, -, +

Динамическая структура, приведенная в разделе результатов, имеет две особенности: +во-первых, ее элементы связаны символом =, а во-вторых, перед первым элементом присутствует текст nil<.

-

, , - ( Next, ), - ( Prev), Prev - nil:

+

Это означает, что результирующая структура является двусвязной, то есть каждый ее элемент связан не +только с последующим элементом (с помощью поля Next, как в односвязной структуре), но и с +предыдущим элементом (с помощью нового поля Prev), а поле Prev первого элемента имеет +значение nil:


-

+

Приступаем к решению

-

- Prev , :

+

Для преобразования исходной односвязной структуры в двусвязную необходимо задать правильные значения для +полей Prev всех элементов структуры, перебирая в цикле пары соседних элементов:

 uses PT4;
 var
@@ -377,40 +377,40 @@ Dynamic30,
     p1 := p1^.Next;
     p := p^.Next;
   end;
-  write(p1); {      }
+  write(p1); { вывод указателя на последний элемент }
 end.
 
-

Prev , . -( , nil<):

+

В этой программе мы определили поля Prev для всех элементов, кроме первого. Поэтому решение будет считаться ошибочным +(обратите внимание на то, что перед первым элементом полученного списка отсутствует текст nil<):

-

. «=» . -, , - , , :

+

Замечание. При анализе ошибочного решения часто оказывается полезным и специальное обозначение «=» для двойной связи. +Предположим, например, что информация +о результирующей двусвязной структуре, созданной программой, имеет вид:

                          P2
 nil< 33 = 64 - 78 = 12 = 51 >nil
 
-

, , -( Next , Prev - ).

+

Это означает, что между вторым и третьим элементом структуры имеется не двойная, а одинарная связь +(поле Next второго элемента содержит адрес третьего элемента, а поле Prev третьего элемента +не содержит адрес второго).


-

-

while - :

+

Правильное решение

+

Для получения правильного решения достаточно добавить в программу перед циклом while +следующий оператор:

   p1^.Prev := nil;
 
-

:

+

Приведем вид окна задачника при первом запуске исправленной программы:

-

. Dynamic30 , - : +

Замечание. Для задания Dynamic30 возможен более короткий вариант решения, +в котором не требуется особо обрабатывать первый элемент списка:

@@ -434,36 +434,36 @@ nil< 33 = 64 - 78 = 12 = 51 >nil
 
 
 
-

5.

+

Пример 5. Циклические динамические структуры


-

-

, «», - Next ( , - Prev - ). -Dynamic55, - - .

-

- , - , «» , - — :

+

Знакомство с заданием

+

Динамическая структура называется циклической, если она замкнута в «кольцо», то есть ее последний элемент +связан полем Next с первым (в случае двусвязной структуры требуется также, чтобы ее первый элемент +был связан полем Prev +с последним элементом). Простейшим заданием на циклические структуры является +Dynamic55, в котором требуется +преобразовать обычный двусвязный список +в циклический.

+

Запустив программу-заготовку для этого задания, мы увидим +на экране изображение двух динамических структур, причем исходная структура является «обычным» двусвязным списком, +а результирующая структура — циклическим двусвязным списком:

-

<< = = >> -(, Prev Next - nil).

-

, , , - :

+

Обозначения << = и = >> позволяют отличить циклический список от обычного +(напомним, что у обычного двусвязного списка поле Prev первого элемента и поле Next последнего +элемента равны nil).

+

Таким образом, экранный текст, описывающий циклический двусвязный список, является упрощенным вариантом +следующей схемы:


-

-

Dynamic55 - :

+

Приступаем к решению

+

Для решения задания Dynamic55 достаточно найти последний элемент исходного списка и связать его с +первым элементом:

 uses PT4;
 var
@@ -478,21 +478,21 @@ Dynamic55, 
   write(p2);
 end.
 
-

«» , , - ( — ). -( , , ):

+

В данном варианте решения мы «забыли» о том, что надо связать не только последний элемент с первым, +но и первый с последним (поскольку наш список — двусвязный). Поэтому решение оказалось ошибочным +(обратите внимание на то, что после последнего элемента полученного списка изображена одинарная, а не двойная черта):


-

-

write - :

+

Правильное решение

+

Для получения правильного решения достаточно добавить в программу перед процедурой вывода write +следующий оператор:

   p1^.Prev := p2;
 
-

:

+

Приведем вид окна задачника при первом запуске исправленной программы:

@@ -500,34 +500,34 @@ Dynamic55,
-

-

« (F2)», - , F2, , - :

+

Просмотр результатов выполнения заданий

+

Щелкнув мышью на метке «Результаты (F2)», расположенной в правом верхнем +углу окна задачника, или нажав клавишу F2, мы можем вывести на экран окно результатов, +в котором будет перечислены все наши попытки решения задачи:

-Dynamic2    a08/09 13:11  .
-Dynamic2    a08/09 13:15     .
-Dynamic2    a08/09 13:17  .
-Dynamic2    a08/09 13:20  !
-Dynamic3    a08/09 13:21  .
-Dynamic3    a08/09 13:24  .
-Dynamic3    a08/09 13:28  !
-Dynamic5    a08/09 13:29  .
-Dynamic5    a08/09 13:30    .
-Dynamic5    a08/09 13:31  !
-Dynamic30   a08/09 13:34  .
-Dynamic30   a08/09 13:42  .
-Dynamic30   a08/09 13:43  !
-Dynamic55   a08/09 13:54  .
-Dynamic55   a08/09 13:57  .
-Dynamic55   a08/09 13:58  !
+Dynamic2    a08/09 13:11 Ознакомительный запуск.
+Dynamic2    a08/09 13:15 Выведены не все результирующие данные.
+Dynamic2    a08/09 13:17 Ошибочное решение.
+Dynamic2    a08/09 13:20 Задание выполнено!
+Dynamic3    a08/09 13:21 Ознакомительный запуск.
+Dynamic3    a08/09 13:24 Ошибочное решение.
+Dynamic3    a08/09 13:28 Задание выполнено!
+Dynamic5    a08/09 13:29 Ознакомительный запуск.
+Dynamic5    a08/09 13:30 Не освобождена динамическая память.
+Dynamic5    a08/09 13:31 Задание выполнено!
+Dynamic30   a08/09 13:34 Ознакомительный запуск.
+Dynamic30   a08/09 13:42 Ошибочное решение.
+Dynamic30   a08/09 13:43 Задание выполнено!
+Dynamic55   a08/09 13:54 Ознакомительный запуск.
+Dynamic55   a08/09 13:57 Ошибочное решение.
+Dynamic55   a08/09 13:58 Задание выполнено!
 
-

Esc. - PascalABC.NET. - « | », - - Shift+Ctrl+R. +

Для закрытия окна результатов достаточно нажать клавишу Esc. +Окно результатов можно отобразить на экране и после закрытия окна задачника и возврата в среду PascalABC.NET. +Для этого надо использовать команду меню «Модули | Просмотреть результаты», кнопку + или клавиатурную +комбинацию Shift+Ctrl+R.

diff --git a/PABCNetHelp/ForEducation/CheckedTasks/ctstring.html b/PABCNetHelp/ForEducation/CheckedTasks/ctstring.html index fb5a95cb5..90f375e63 100644 --- a/PABCNetHelp/ForEducation/CheckedTasks/ctstring.html +++ b/PABCNetHelp/ForEducation/CheckedTasks/ctstring.html @@ -7,17 +7,17 @@ -

+

Задание на обработку строк


-

-

+

Создание программы-заготовки и знакомство с заданием

-

String9.

-

- - - « | », - - Shift+Ctrl+L. :

+

В качестве примера задания на обработку строк рассмотрим задание String9.

+

Программу-заготовку для решения этого задания можно создать с помощью +команды +меню «Модули | Создать шаблон программы», кнопки + или клавиатурной +комбинации Shift+Ctrl+L. Эта заготовка будет иметь следующий вид:

 uses PT4;
@@ -28,21 +28,21 @@
 end.
 
-

:

+

После запуска данной программы на экране появится окно задачника:

-

char string ; , , - (, 9) , -(, '9'). - , , . +

Данные типа char и string в окне задачника заключаются в апострофы; это позволяет, в частности, +отличить числовые данные (например, 9) от символьных и строковых данных, содержащих цифры +(например, '9'). +Кроме того, апострофы дают возможность увидеть пробелы, находящиеся в начале или конце строк.


-

-

, -( , ): +

Ввод исходных данных

+

Добавим в программу фрагмент, обеспечивающий ввод исходных данных +(мы намеренно ввели данные не в том порядке, в котором они указаны в окне задачника):

@@ -57,47 +57,47 @@
 
-

, - . , - -« »:

+

Запуск нового варианта программы уже не будет считаться ознакомительным, поскольку в программе +выполняется ввод исходных данных. Так как порядок ввода исходных данных является ошибочным, +этот вариант решения будет признан неверным и приведет к сообщению +«Неверно указан тип при вводе исходных данных»:

-

, Programming Taskbook -: - ( ), . - , -, , , -.

-

, , -, ( ), read - - . , (1) - , , - . -Programming Taskbook: - - . +

Общее правило, определяющее порядок ввода и вывода данных для задачника Programming Taskbook +гласит: +ввод и вывод данных производится по строкам (слева направо), а строки просматриваются сверху вниз. +Иными словами, +данные, отображаемые в окне задачника, вводятся и выводятся в том порядке, в котором читается обычный +текст.

+

На панели индикаторов, расположенной под информационной панелью, +отмечено, что введен всего один элемент исходных данных (из трех), хотя в процедуре read нашей программы +были +указаны три переменные. Это объясняется тем, что при вводе первой из этих переменных (с1) +была обнаружена ошибка несоответствия типа, поэтому задачник не стал анализировать остальные данные, +которые программа пыталась ввести. Здесь проявляется еще одно правило задачника +Programming Taskbook: при обнаружении первой ошибки ввода-вывода +анализ оставшихся исходных данных и результатов не проводится.

-

, :

+

Исправим нашу программу, изменив порядкок параметров в процедуре ввода:

   read(n, c1, c2);
 
-

, - -, - :

+

Теперь с вводом данных проблем не возникает, однако из-за того что в программе отсутствует вывод результирующих +данных, решение по-прежнему считается ошибочным:

-

, , , . - : , - ( ). +

Данная ошибка, в отличие от предыдущей, связана не с вводом исходных данных, а с выводом результатов. +Это отмечается в окне задачника двумя способами: цветной маркер ошибки располагается рядом с индикатором вывода, +и этим же цветом выделяется заголовок раздела результатов (который в данном случае не содержит никаких данных).


-

-

+ ( ):

+

Формирование и вывод требуемой строки

+

Для формирования нужной строки воспользуемся операцией + (сцепления строк):

 uses PT4;
@@ -114,30 +114,30 @@
   write(s);
 end.
 
-

, s := '' , - «» ( , — - #0, - — '').

-

:

+

Заметим, что в операторе s := '' нет необходимости, так как все глобальные переменные в Паскале автоматически +инициализируются «нулевыми» значениями (для числовых данных это обычные нули, для символов — это +символ #0, для +строк — пустая строка '').

+

Результат выполнения этой программы будет следующим:

-

, , , - . , - ; :

+

Красная звездочка, расположенная в конце выведенной строки, означает, что длина полученной строки превышает +длину верной строки. Для того чтобы увидеть на экране всю полученную строку, достаточно подвести курсор мыши +к строке со звездочкой; при этом полный текст строки появится во всплывающей подсказке:

-

. . , - 1 99, 10000, -, : 1*.

+

Замечание. Красная звездочка может появиться и при выводе ошибочных числовых данных. Например, если ожидается +целое число в диапазоне от 1 до 99, а получено число 10000, то на экране изобразится первая цифра этого большого +числа, за которой будет указана красная звездочка: 1*.


-

-

- . , - , n - 2*n ( n, ). -

- :

+

Верное решение

+

Ошибка в предыдущей программе возникла из-за неверного указания количества итераций цикла. Действительно, +на каждой итерации к строке добавляется по два символа, поэтому после n итераций +строка будет содержать 2*n символов (а не n, как требуется в задании). +

Для исправления ошибки достаточно вдвое +уменьшить число итераций:

 uses PT4;
@@ -154,13 +154,13 @@
   write(s);
 end.
 
-

« . 1 ( 5)», - — « !»:

+

После запуска этого варианта мы получим сообщение «Верное решение. Тест номер 1 (из 5)», +а после пяти подобных запусков — сообщение «Задание выполнено!»:

-

. , , String9, - , :

+

Замечание. Приведем другой, более быстрый, способ решения задания String9, +в котором результирующая строка заполняется посимвольно, как обычный массив:

 uses PT4;
@@ -180,34 +180,34 @@
   write(s);
 end.
 
-

SetLength(s, n), - s. , - , - .

+

Обратите внимание на процедуру SetLength(s, n), которая обеспечивает правильную настройку длины результирующей +строки s. Без вызова этой процедуры программа работала бы неверно, так как любая +глобальная строковая переменная инициализируется пустой строкой, а при работе с отдельными символами строки +корректировка ее длины не производится.


-

-

« (F2)», - , F2, , - :

+

Просмотр результатов выполнения задания

+

Щелкнув мышью на метке «Результаты (F2)», расположенной в правом верхнем +углу окна задачника, или нажав клавишу F2, мы можем вывести на экран окно результатов, +в котором будет перечислены все наши попытки решения задачи:

-String9   a08/09 11:17  .
-String9   a08/09 11:18       .
-String9   a08/09 11:21     .
-String9   a08/09 11:26  .
-String9   a08/09 11:29  !
+String9   a08/09 11:17 Ознакомительный запуск.
+String9   a08/09 11:18 Неверно указан тип при вводе исходных данных.
+String9   a08/09 11:21 Выведены не все результирующие данные.
+String9   a08/09 11:26 Ошибочное решение.
+String9   a08/09 11:29 Задание выполнено!
 
-

Esc. - PascalABC.NET. - « | », - - Shift+Ctrl+R. +

Для закрытия окна результатов достаточно нажать клавишу Esc. +Окно результатов можно отобразить на экране и после закрытия окна задачника и возврата в среду PascalABC.NET. +Для этого надо использовать команду меню «Модули | Просмотреть результаты», кнопку + или клавиатурную +комбинацию Shift+Ctrl+R.

diff --git a/PABCNetHelp/ForEducation/CheckedTasks/cttree.html b/PABCNetHelp/ForEducation/CheckedTasks/cttree.html index e2a7ba11c..af95d6ab6 100644 --- a/PABCNetHelp/ForEducation/CheckedTasks/cttree.html +++ b/PABCNetHelp/ForEducation/CheckedTasks/cttree.html @@ -10,35 +10,35 @@ -

+

Задания на обработку деревьев


-

1. +

Пример 1. Анализ бинарного дерева


-

Tree, Dynamic, : - , - TNode, PNode TNode: PNode = -^TNode. TNode PNode ; - Programming Taskbook. +

В заданиях группы Tree, как и в заданиях группы Dynamic, мы встречаемся с двумя новыми видами данных: +это древовидные динамические структуры, реализованные в виде наборов связанных друг с +другом записей типа TNode, и указатели типа PNode на записи TNode: PNode = +^TNode. Типы TNode и PNode не являются стандартными типами языка Паскаль; они +определены в задачнике Programming Taskbook.

-

, , - Tree2. +

Особенности, связанные с использованием новых типов данных, рассмотрим на +примере задания Tree2.

Tree2°. - P1 TNode — . - Left Right ( ), -, , — , , - Left Right nil ( nil Left Right). - . +Дан адрес P1 записи типа TNode — корня дерева. +Эта запись связана полями Left и Right с другими записями того же типа (дочерними вершинами), +они, в свою очередь, — со своими дочерними вершинами, и так далее до записей, +поля Left и Right которых равны nil (у некоторых вершин может быть равно nil одно из полей Left или Right). +Вывести количество вершин дерева.


-

-

-

, - - - « | », - - Shift+Ctrl+L. : +

Создание программы-заготовки и знакомство с заданием

+

Напомним, что программу-заготовку для решения этого задания можно создать с помощью +команды +меню «Модули | Создать шаблон программы», кнопки + или клавиатурной +комбинации Shift+Ctrl+L. Приведем текст созданной заготовки:

@@ -48,67 +48,67 @@
   Task('Tree2');
 end.
 
-

: +

После запуска программы на экране появится окно задачника:

-

-: . +

Это окно содержит в качестве исходных и результирующих данных новые +элементы: бинарные деревья и указатели.

-

, . - . , - ( ). - , . . Data TNode. - , ; - , — . - , Left / Right nil. +

Начнем с описания того, как отображается на экране дерево. Для его вывода используется +несколько экранных строк. На каждой строке изображаются вершины дерева, +находящиеся на определенном уровне (номер уровня указывается слева от изображения дерева). +Для каждой вершины выводится ее значение, т. е. значение поля Data соответствующей записи типа TNode. +Любая вершина соединяется линиями со своими дочерними вершинами, расположенными на следующем уровне дерева; +левая дочерняя вершина изображается слева от родительской вершины, а правая — справа. +Отсутствие у вершины одной или обеих дочерних вершин означает, что ее поля Left и/или Right равны nil.

- , . - 15, 58, - 42, 4. -3 4; 3 15 11, 4 — 38 84. - - ( 55 20), : - ( 42, 87 60) ( 58). +Рассмотрим в качестве примера дерево, приведенное на рисунке. +Корень этого дерева имеет значение 15, левая дочерняя вершина корня равна 58, +правая дочерняя вершина равна 42, глубина дерева равна 4. Все листья дерева находятся на уровнях +3 и 4; листья на уровне 3 имеют значения 15 и 11, листья на уровне 4 — значения 38 и 84. +Некоторые из внутренних вершин дерева имеют по две +дочерние вершины (это корень и вершины со значениями 55 и 20), некоторые по одной: +левой (вершины 42, 87 и 60) или правой (вершина 58).

-

, , - . - , , - , -, - ( , ). +

Поскольку это дерево указано в разделе исходных данных, следовательно, после инициализации +задания оно уже существует и размещается в некоторой области динамической памяти. +Для доступа к данным, размещенным в динамической памяти, +необходимо знать их адрес, поэтому в любом задании на обработку деревьев в набор исходных данных входят +указатели, содержащие адреса каких-либо вершин этих деревьев (как правило, указывается адрес корня дерева).

-

- , - . +

Работа с исходными и результирующими +данными типа указателя подробно обсуждается в разделе, посвященном +линейным динамическим структурам.


-

+

Решение задачи

-

Tree2 , - ; - , . +

В задании Tree2 не требуется ни создавать, ни +преобразовывать исходное дерево; +его необходимо лишь проанализировать, а именно определить количество его вершин.

-

, , - ( ). - , - ( , ), , - . -, NodeCount(P), , - P, : P nil, - 0; +

Для выполнения этого задания, как и для подавляющего большинства других заданий на обработку деревьев, +следует воспользоваться вспомогательной рекурсивной подпрограммой (функцией или процедурой). +Рекурсивная природа алгоритмов, +связанных с обработкой деревьев (в частности, бинарных деревьев), объясняется тем, что сами +определения деревьев общего вида и бинарных деревьев являются рекурсивными. +Так, дать словесное описание функции NodeCount(P), подсчитывающей число вершин дерева с корнем, +с которым связан указатель P, можно следующим образом: если указатель P равен nil, +то следует вернуть значение 0; в противном случае следует вернуть значение 1 + NodeCount(P^.Left) + NodeCount(P^.Right) -( , — - , — ; , - , ). +(в этом выражении первое слагаемое соответствует корню дерева, второе — +его левому поддереву, а третье — его правому поддереву; при этом не требуется проверять, +что указанные поддеревья существуют, так как при их отсутствии соответствующее слагаемое просто будет равно нулю).

-

, : +

Таким образом, решение задачи будет иметь следующий вид:

 uses PT4;
@@ -126,57 +126,57 @@ begin
   write(NodeCount(P1));
 end.
 
-

NodeCount (), - Left Right nil. NodeCount, - : P1 , - NodeCount(P1), write. +

Цепочка рекурсивных вызовов функции NodeCount завершается при достижении терминальной вершины (листа), +у которой поля Left и Right равны nil. Благодаря наличию функции NodeCount, +раздел операторов программы является очень кратким: в нем считывается адрес P1 корня исходного дерева, +после чего вызывается функция NodeCount(P1), возвращаемое значение которой сразу выводится процедурой write.

-

, « -!». +

Запустив эту программу пять раз, мы получим сообщение «Задание +выполнено!».


-

2. +

Пример 2. Бинарные деревья с обратной связью


-

- , . , , - , - . , - , - . Parent. - , Parent nil. +

Рассмотренная выше реализация бинарных деревьев позволяет легко переходить от родительских вершин +к их дочерним вершинам, но не допускает обратного перехода. В то же время, для некоторых задач, +связанных с обработкой деревьев, возможность обратного перехода от потомков к их предку позволяет +получить более простое решение. Ясно, что для обеспечения возможности обратного перехода +каждую вершину дерева надо снабдить еще одним полем связи, в котором должна храниться ссылка на +ее родительскую вершину. Это поле связи естественно назвать Parent. Поскольку корень дерева +предка не имеет, его поле Parent должно быть равно nil.

-

, , . - Tree49. +

Деревья, вершины которых содержат информацию о своих родителях, будем называть деревьями с обратной связью. +Особенности работы с подобными деревьями рассмотрим на примере задания Tree49.

Tree49°. - P1 , TNode, - Left Right. Parent TNode, - , - ( Left Right), - ( Parent). Parent nil. +Дан указатель P1 на корень дерева, вершинами которого являются записи типа TNode, +связанные между собой с помощью полей Left и Right. Используя поле Parent записи TNode, +преобразовать исходное дерево в дерево с обратной связью, в котором каждая вершина +связана не только со своими дочерними вершинами (полями Left и Right), но и с родительской +вершиной (полем Parent). Поле Parent корня дерева положить равным nil.

-

-, Tree49, - «» , - , - , . +

Запустив программу-заготовку, созданную для задания Tree49, +мы увидим в области исходных данных изображение «обычного» бинарного дерева, +в то время как в области результатов будет изображено дерево с обратной связью, +вершины которого связаны не одинарными, а двойными линиями.

-

, - , - . , , , - ; . - P1 - , - . +

Обратите также внимание на то, что в области результатов отсутствуют какие-либо данные, кроме +измененного дерева. Это означает, что в программе, решающей задачу, не требуется использовать +процедуры вывода; достаточно лишь преобразовать исходное дерево требуемым образом. +Поскольку при таком преобразовании адрес корня дерева P1 +не изменится, задачник сможеть получить доступ к +этому дереву и проверить его правильность.

-

- Parent , . - P , - Par : +

Для преобразования исходного дерева в дерево с обратной связью необходимо задать правильные значения +для полей Parent всех вершин дерева, перебирая эти вершины с помощью подходящей рекурсивной процедуры. +В эту процедуру удобно передавать в качестве параметров не только указатель P на текущую вершину, +но и указатель Par на предка этой вершины:

 uses PT4;
@@ -195,77 +195,77 @@ begin
   SetParent(P1, nil);
 end.
 
-

SetParent - nil. +

При стартовом запуске рекурсивной процедуры SetParent в качестве +второго параметра указывается nil.

-. . -, , - , , , Parent -(, nil). +Примечание. Обозначение для двойной связи может оказаться полезным при анализе ошибочного решения. +Так, если в изображении дерева с обратной связью имеется вершина, соединенная со своей родительским +вершиной не двойной, а одинарной линией, значит, у этой вершины поле Parent содержит ошибочное значение +(например, равно nil).


-

3. +

Пример 3. Деревья общего вида


-

TNode , - , -( ; -« »). - Tree86 — , , - . +

С помощью связанных записей типа TNode можно моделировать не только бинарные деревья, +но и произвольные упорядоченные деревья, вершины которых имеют любое число непосредственных потомков +(будем называть такие деревья деревьями общего вида; для них также используется название +«деревья с множественным ветвлением»). +Рассмотрим задание Tree86 — первое из заданий, связанных с деревьями общего вида, в котором +описываются особенности подобных деревьев.

Tree86°. - ( , - ) - TNode : Left - (. . ) , Right — - , . . , . - Right nil, . - P1 . , - , P2 . +Дерево общего вида (каждая вершина которого может иметь произвольное число дочерних вершин, +расположенных в фиксированном порядке в направлении слева направо) реализуется с помощью набора +связанных записей типа TNode следующим образом: для каждой внутренней вершины ее поле Left +содержит указатель на ее первую (т. е. левую) дочернюю вершину, а поле Right — указатель на ее +правую сестру, т. е. вершину, имеющую в дереве общего вида того же родителя. +Поле Right корня дерева общего вида всегда равно nil, так как корень сестер не имеет. +Дан указатель P1 на корень непустого бинарного дерева. Создать дерево общего вида, +соответствующее исходному бинарному дереву, и вывести указатель P2 на его корень.

-

, - TNode ( ): +

Приведем пример дерева общего вида, которое реализовано с помощью связанных +записей типа TNode (аналогичным образом деревья общего вида изображаются в окне задачника):

-

( 13) (71, 73 29), - 71 , 73 (18, 93 92), - 29 — (24 84). 46, - 93. +

Корень этого дерева (со значением 13) имеет три дочерние вершины (71, 73 и 29), +причем вершина 71 не имеет потомков, вершина 73 имеет три непосредственных потомка (18, 93 и 92), +а вершина 29 — два (24 и 84). На последнем уровне располагается вершина 46, являющаяся +единственной дочерней вершиной вершины 93.

-

Tree86 , . +

При ознакомительном запуске задания Tree86 на экране появится окно, подобное следующему.

-

, : -, , , - , , — . - -, , - , , — . +

Обратите внимание на то, как выглядит одно и то же дерево в двух различных представлениях: +вариант, соответствующий обычному бинарному дереву, приводится в разделе исходных данных, +а вариант, соответствующий дереву общего вида, — в разделе результатов. +При переходе от бинарного дерева к дереву общего вида часть информации о структуре бинарного дерева +теряется, поскольку в случае, если некоторая вершина дерева общего вида имеет только одного +непосредственного потомка, нельзя определить, каким был этот потомок в исходном бинарном дереве — левым или правым.

-

, , , , - ( , - ). +

Напомним, что точки, обрамляющие значения вершин в разделе результатов, означают, что +все эти вершины должны быть созданы программой учащегося (в отличие от вершин исходного дерева, созданных +самим задачником при инициализации задания).

-

CreateNode(P). - P , . - ( , P = nil, - nil). - . , -( P ), ( P - ) . - P P1 P2. , - P (, ), - P1, P2 nil. - P1 P2, , , - . , Tree86. +

При формировании нового дерева будем использовать рекурсивную функцию CreateNode(P). +Параметр P содержит указатель на вершину исходного дерева, копия которой создается при вызове функции. +Возвращаемым значением функции является указатель на созданную вершину (как обычно, если P = nil, +то функция не выполняет никаких действий и возвращает nil). Для создания дочерних вершин выполняется +рекурсивный вызов этой функции. Заметим, что цепочка дочерних вершин может быть пустой +(если вершина P является листом), содержать один элемент (если вершина P имеет только одного +непосредственного потомка) или два элемента. Перед формированием цепочки дочерних вершин удобно +занести адреса дочерних вершин вершины P во вспомогательные переменные P1 и P2. При этом в случае, +если вершина P имеет только одного потомка (неважно, левого или правого), адрес этого потомка +заносится в переменную P1, а переменная P2 остается равной nil. Благодаря использованию +переменных P1 и P2, фрагмент кода, отвечающий за формирование списка дочерних вершин, +удается сделать более кратким. Приведем текст программы, решающей задачу Tree86.

 uses PT4;
@@ -287,7 +287,7 @@ begin
     P1 := P2;
     P2 := nil;
   end;
-  {     }
+  { формирование списка дочерних вершин }
   result^.Left := CreateNode(P1);
   if P1 <> nil then
     result^.Left^.Right := CreateNode(P2);
@@ -300,15 +300,15 @@ begin
 end.
 

-. , , - , - Right ( Right nil). - «» ; - Left . - , , - -( ), , - , . +Примечание. Фрагмент дерева общего вида, содержащий все дочерние вершины некоторой вершины, +можно рассматривать как односвязный список, элементы которого связаны между собой +с помощью поля Right (у последнего элемента списка поле Right равно nil). +Каждый элемент подобного списка может содержать «подсписок» своих дочерних элементов; +адрес начала этого подсписка хранится в поле Left данного элемента. +Поэтому в алгоритмах, связанных с обработкой вершин деревьев общего вида, +для перебора непосредственных потомков некоторой вершины удобно использовать цикл +(как при переборе элементов списка), в то время как для обработки каждой дочерней вершины следует, +как обычно, использовать рекурсию.

diff --git a/PABCNetHelp/ForEducation/CheckedTasks/index.html b/PABCNetHelp/ForEducation/CheckedTasks/index.html index 73b2ae7be..4fa7c6717 100644 --- a/PABCNetHelp/ForEducation/CheckedTasks/index.html +++ b/PABCNetHelp/ForEducation/CheckedTasks/index.html @@ -6,93 +6,93 @@ -

+

Что такое проверяемые задания


-

, , -. , - , , . - , - .

-

PascalABC.NET - -Programming Taskbook , , - ( , -, , - . .), - .

-

, - PascalABC.NET? - , - . +

Задания, проверяемые автоматически, являются мечтой любого +преподавателя. Несомненно, что при автоматической проверке можно проверить +только сам факт выполнения задания, но не те знания, которые получил ученик. +Поэтому крайне желательно, чтобы выполнение проверяемых заданий проходило под +контролем преподавателя.

+

Опыт авторов системы PascalABC.NET и +электронного задачника +Programming Taskbook свидетельствует, что обучение программированию с помощью проверяемых заданий, +сочетаемое с другими методиками (обучение на примерах, поиск ошибок в +программах, ручная и автоматическая трассировка, создание творческих программных +проектов и т. д.), позволяет существенно ускорить сам процесс обучения и облегчить +труд преподавателя.

+

Итак, что такое проверяемые +задания и как их выполнять в системе PascalABC.NET? +Для того чтобы это узнать, проще всего ознакомиться с несколькими примерами +выполнения типовых заданий.

-

1. Begin3 - Programming Taskbook.

-

Begin3, - - : - - read -write : - read -( , - ), write - . , , - , , - ; -, . - , - , - , - . +

Пример 1. Задание Begin3 +из электронного задачника Programming Taskbook.

+

Выполняя задание Begin3, +следует обратить внимание на +одну важную особенность работы с электронным задачником: +при его подключении процедуры ввода-вывода read и +write начинают работать иначе: +процедура read получает исходные данные непосредственно от задачника +(который генерирует их, используя датчик случайных чисел и учитывая +особенности выполняемого задания), а процедура write пересылает +результаты задачнику для проверки их правильности. Исходные данные, подготовленные задачником, +и результаты, полученные программой, отображаются в соответствующих разделах +окна задачника; ученик не должен заботиться об их форматировании и поясняющих +подписях, поскольку за эти действия отвечает сам задачник. +Важно учитывать, что при каждом запуске программы учащегося ей +будут предлагаться различные варианты исходных данных, поэтому для +решения задания необходимо разработать алгоритм, +правильно обрабатывающий любые наборы допустимых исходных данных.

-

2. a1 -.

-

- .

-

3. String9 - Programming Taskbook.

-

- . , , - — .

-

4. File48 - Programming Taskbook.

-

- . - , -. , , - ; - . , - , -, . - .  

-

5. Dynamic - Programming Taskbook.

-

, - . - ( ), - . - . - - .

-

6. Tree - Programming Taskbook.

-

— -. , , - , - . . +

Пример 2. Задание a1 для исполнителя +Робот.

+

Исполнитель Робот является бесценным источником заданий для быстрого обучения +основным конструкциям программирования школьников средних классов.

+

Пример 3. Задание String9 +из электронного задачника Programming Taskbook.

+

Данное задание знакомит с особенностями выполнения заданий на обработку символов +и строк. Следует обратить внимание на диагностику ошибки, связанной с выводом строки, длина которой превышает длину +строки — правильного решения.

+

Пример 4. Задание File48 +из электронного задачника Programming Taskbook.

+

Это задание знакомит с особенностями выполнения заданий +на обработку типизированных файлов. Исходные файлы при вызове +задания создаются на диске, после чего могут обрабатываться по стандартным +правилам. Содержимое файлов, созданных в процессе выполнения задания, +проверяется электронным задачником; после проверки исходные и результирующие +файлы автоматически удаляются. Следует обратить внимание на то, как содержимое +файлов отображается в окне задачника, а также на обработку ошибок времени +выполнения, возникающих при выполнении заданий. В примере описаны типичные ошибки при +работе с файлами и способы их устранения.  

+

Пример 5. Задания группы Dynamic +из электронного задачника Programming Taskbook.

+

В данном примере описываются задания из раздела, посвященного указателям и линейным динамическим +структурам данных. При вызове задания в динамической памяти создаются все +исходные структуры данных (в виде односвязных или двусвязных списков), а +указатели на элементы этих структур выступают в качестве входных данных задания. +Содержимое всех структур данных отображается в окне задачника в наглядном виде. +Созданные программой ученика структуры данных анализируются задачником и после +анализа все структуры данных удаляются из памяти.

+

Пример 6. Задания группы Tree +из электронного задачника Programming Taskbook.

+

В данном примере описываются задания на обработку иерархических структур данных — +деревьев. Подобные структуры, как и линейные динамические структуры, рассмотренные +в предыдущем примере, создаются задачником автоматически и в наглядном виде отображаются +в его окне. Для доступа к ним также используются указатели.

-

7. ExamBegin ExamTaskC - Programming Taskbook.

-

, - . , - - -Pascal ( , Programming Taskbook). - ExamBegin, , - ExamTaskC, . +

Пример 7. Задания групп ExamBegin и ExamTaskC +из электронного задачника Programming Taskbook.

+

Пример содержит описание процесса выполнения заданий, связанных с ЕГЭ +по информатике. Основной особенностью этих заданий является то, что +при их выполнении требуется использовать стандартные процедуры ввода-вывода языка +Pascal (а не их специальные модификации, реализованные для задачника Programming Taskbook). +Рассматриваются задания из группы ExamBegin, посвященные базовым алгоритмам, +и задания из группы ExamTaskC, посвященные обработке сложных наборов данных.

-

, Programming Taskbook, - - , 4.11. +

Все примеры, связанные с электронным задачником Programming Taskbook, иллюстрируются +изображениями окна задачника +в режиме с динамической компоновкой, появившемся в версии 4.11.

diff --git a/PABCNetHelp/ForEducation/Executors/dmstart.html b/PABCNetHelp/ForEducation/Executors/dmstart.html index a7bb48efb..07c7cc9cc 100644 --- a/PABCNetHelp/ForEducation/Executors/dmstart.html +++ b/PABCNetHelp/ForEducation/Executors/dmstart.html @@ -2,7 +2,7 @@ - + @@ -18,54 +18,54 @@ -

- - . - , , . - . -

, , -:

+

Исполнитель Чертежник

+Исполнитель Чертежник +предназначен для построения рисунков и чертежей на плоскости с координатами. +Чертежник имеет перо, которое он может поднимать, опускать и перемещать. +При перемещении опущенного пера за ним остается след. +

Исполнитель Чертежник и поле, на котором он работает, отображаются на экране следующим +образом:

-

, -, , — -. , -.

-

- Drawman: +

Здесь маленький квадрат изображает Чертежника, красным цветом изображены +отрезки, которые надо нарисовать, а синим — уже нарисованные Чертежником +отрезки. Когда перо Чертежника опущено, он изображается квадратом меньшего +размера.

+

Команды исполнителя Чертежник +содержатся в модуле Drawman:

- ToPoint(x,y) - (x,y);
- OnVector(a,b)
- (a,b);
- PenUp
;
- PenDown
.

+ ToPoint(x,y) – +перемещает перо Чертежника в точку (x,y);
+ OnVector(a,b)
– перемещает перо +Чертежника на вектор (a,b);
+ PenUp
– поднимает перо Чертежника;
+ PenDown
– опускает перо Чертежника.

-

- :

+

Для вызова задания для исполнителя Чертежник +используется следующий шаблон программы:

uses Drawman;
begin
  Task('c1');
end.
-

-.

-

Task — , - Drawman - .

-

-:

+

В конце программы перо Чертежника должно быть поднято и находиться в начале +координат.

+

Здесь Task ¦— процедура, +содержащаяся в модуле Drawman и вызывающая +задание с указанным именем.

+

Имеются следующие группы заданий для исполнителя +Чертежник:

- a ;
- c
;
- cc
;
- p
;
- pp
. + a – вводные задания;
+ c
– цикл с параметром;
+ cc
– вложенные циклы;
+ p
– процедуры без параметров;
+ pp
– процедуры с параметрами.
-

20 x 30 - StandardField , - N x M — Field(N,M).

+

Для создания произвольного поля размера 20 x 30 +используется процедура StandardField без параметров, а для создания +поля размера N x M — процедура Field(N,M).

diff --git a/PABCNetHelp/ForEducation/Executors/index.html b/PABCNetHelp/ForEducation/Executors/index.html index 3f3421179..48c5686dc 100644 --- a/PABCNetHelp/ForEducation/Executors/index.html +++ b/PABCNetHelp/ForEducation/Executors/index.html @@ -7,27 +7,27 @@ -

-

, - . , - . +

Что такое исполнители

+

Исполнителем будем называть устройство, способное выполнять +определенный набор команд. Обычно с исполнителем связана некоторая среда, в +которой он работает.

-

- - . PascalABC.NET - -, . . , . .  - . .  -« 7–9 », ., 2001. , - , - - , .

-

, PascalABC.NET - — - PascalABC.NET.

-

. a1 - -.

+

Традиционно концепция исполнителей используется для +быстрого обучения основным конструкциям языка программирования при проведении +занятий в средних классах школы. В PascalABC.NET реализованы исполнители +Робот и +Чертежник, описанные в учебнике А. Г. Кушниренко, Г. В. Лебедева +и Я. Н. Зайдельмана +«Информатика 7–9 классы», М., 2001. Следует отметить, что +данный учебник уже не используется для обучения в школе, однако +он является наиболее удачным и по интеграции исполнителей в процесс обучения +начальному программированию, и по набору задач.

+

Кроме того, исполнители в PascalABC.NET +активно используются в системе проверяемых заданий — одной из +ключевых учебных особенностей системы PascalABC.NET.

+

См. также пример выполнения задания a1 для +исполнителя +Робот.

diff --git a/PABCNetHelp/ForEducation/Executors/robotstart.html b/PABCNetHelp/ForEducation/Executors/robotstart.html index 3f663bc30..decdefa20 100644 --- a/PABCNetHelp/ForEducation/Executors/robotstart.html +++ b/PABCNetHelp/ForEducation/Executors/robotstart.html @@ -2,7 +2,7 @@ - + @@ -29,60 +29,60 @@ -

-

- . , - . — - .

-

, , -:

+

Исполнитель Робот

+

Исполнитель Робот +действует на прямоугольном клеточном поле. Между некоторыми клетками, а +также по периметру поля находятся стены. Основная цель Робота ¦— закрасить +указанные клетки и переместиться в конечную клетку.

+

Исполнитель Робот и поле, на котором он работает, отображаются следующим +образом:

-

, - — , , .

-

- Robot: +

Здесь большой желтый квадрат изображает Робота, маленький +желтый квадрат в левом верхнем углу клетки — конечное положение Робота, черными точками помечены клетки, которые надо закрасить.

+

Команды исполнителя Робот содержатся в +модуле Robot:

- Right - ;
- Left
;
- Up
; + Right – +перемещает Робота вправо;
+ Left
– перемещает Робота влево;
+ Up
– перемещает Робота вверх;
- Down
; + Down – перемещает Робота вниз;
- Paint
;
- WallFromLeft
True - ; + Paint – закрашивает текущую ячейку;
+ WallFromLeft
– возвращает True +если слева от Робота стена;
- WallFromRight
True - ; + WallFromRight – возвращает True +если справа от Робота стена;
- WallFromUp
True - ; + WallFromUp – возвращает True +если сверху от Робота стена;
- WallFromDown
True - ; + WallFromDown – возвращает True +если снизу от Робота стена;
- FreeFromLeft
True - ; + FreeFromLeft – возвращает True +если слева от Робота свободно;
- FreeFromRight
True - ; + FreeFromRight – возвращает True +если справа от Робота свободно;
- FreeFromUp
True - ; + FreeFromUp – возвращает True +если сверху от Робота свободно;
- FreeFromDown
True - ; + FreeFromDown – возвращает True +если снизу от Робота свободно;
- CellIsPainted
True - , , ; + CellIsPainted – возвращает True +если ячейка, в которой находится Робот, закрашена;
- CellIsFree
True - , , . + CellIsFree – возвращает True + если ячейка, в которой находится Робот, не закрашена.
-

- :

+

Для вызова задания для исполнителя Робот используется +следующий шаблон программы:

uses Robot;
begin
@@ -90,26 +90,26 @@ Task('c1');
end.
-

Task — , - Robot - .

-

:

+

Здесь Task — процедура, +содержащаяся в модуле Robot и вызывающая +задание с указанным именем.

+

Имеются следующие группы заданий для исполнителя Робот:

- a ;
- c
;
- if
;
- w
;
- if
+ ;
- count
-;
- mix ;
- cc ;
- p
;
- pp
. + a – вводные задания;
+ c
– цикл с параметром;
+ if
– логические выражения;
+ w
– циклы с условием;
+ сif
– циклы + логические выражения;
+ count
– переменные-счетчики;
+ mix – смешанные задачи;
+ cc – вложенные циклы;
+ p
– процедуры без параметров;
+ pp
– процедуры с параметрами.
-

7 x 9 - StandardField , - N x M — Field(N,M). - .

+

Для создания стандартного поля размера 7 x 9 +используется процедура StandardField без параметров, а для создания +поля размера N x M — процедура Field(N,M). +Робот при этом помещается в центр поля.

diff --git a/PABCNetHelp/ForEducation/MakeModules/DMMake.html b/PABCNetHelp/ForEducation/MakeModules/DMMake.html index 995d03c12..e770cceda 100644 --- a/PABCNetHelp/ForEducation/MakeModules/DMMake.html +++ b/PABCNetHelp/ForEducation/MakeModules/DMMake.html @@ -18,12 +18,12 @@ -

DMTaskMaker

+

Модуль DMTaskMaker


- + Типы модуля DMTaskMaker
@@ -32,14 +32,14 @@

type TaskProcType = procedure;

-

, . - ; - RegisterTask, . +

Тип процедуры, генерирующей конкретное задание. +Каждое задание реализуется в виде отдельной процедуры; для связывания этой процедуры +с именем задания необходимо использовать процедуру RegisterTask, описываемую ниже.

- + Процедуры модуля DMTaskMaker
@@ -47,59 +47,59 @@

procedure Field(szx,szy: integer);

-

szx - szy .

+

Задает поле Чертежника размера szx +на szy клеток.

procedure DoToPoint(x,y: integer);

-

- - (x, y).

+

Перемещает перо Чертежника-постановщика заданий в точку с +координатами (x, y).

procedure DoOnVector(dx,dy: integer);

-

- - (x, y).

+

Перемещает перо Чертежника-постановщика заданий в точку с +координатами (x, y).

procedure DoPenUp;

-

- .

+

Поднимает перо Чертежника-постановщика заданий.

procedure DoPenDown;

-

- .

+

Опускает перо Чертежника-постановщика заданий.

procedure TaskText(s: string);

-

s. +

Задает имя и формулировку задания в строке s.

procedure RegisterGroup(name,description,unitname: string; count: integer);

-

PT4Load. - PT4Load , -, - - . - name, - description, - unitname, , count. - 7 ( ) , - 999. - RegisterGroup - , . +

Обеспечивает автоматическую регистрацию новой группы заданий в программном модуле PT4Load. +В результате имя данной группы будет отображаться в окне модуля PT4Load в списке групп, связанных с исполнителем +Чертежник, +что позволит создать программу-заготовку для выполнения любого задания этой группы. +В качестве параметров процедуры указывается имя группы name, +краткое описание группы description, +имя модуля unitname, в котором описана группа, и количество заданий count. +Имя группы заданий должно содержать не более 7 символов (цифр и латинских букв) и не должно оканчиваться цифрой, +количество заданий не должно превышать 999. +Процедура RegisterGroup должна +вызываться в секции инициализации модуля, содержащего реализацию новой группы заданий для Чертежника.

procedure RegisterTask(name: string; p: TaskProcType);

-

name p, . - . - RegisterGroup, RegisterTask -, . . +

Связывает имя задания name с процедурой p, в которой реализовано данное задание. +Данную процедуру следует вызывать для каждого задания. +Подобно описанной выше процедуре RegisterGroup, процедура RegisterTask должна вызываться в секции инициализации +модуля, содержащего реализацию новой группы заданий для Чертежника. Порядок вызова этих процедур может быть произвольным.

diff --git a/PABCNetHelp/ForEducation/MakeModules/DMMakeCreation.html b/PABCNetHelp/ForEducation/MakeModules/DMMakeCreation.html index 14b5b8944..61577fc10 100644 --- a/PABCNetHelp/ForEducation/MakeModules/DMMakeCreation.html +++ b/PABCNetHelp/ForEducation/MakeModules/DMMakeCreation.html @@ -10,11 +10,11 @@ -

+

Создание заданий для исполнителя Чертежник


-

- . DMTasks.pas -:

+

Опишем последовательность создания группы заданий для +исполнителя Чертежник. Создадим модуль DMTasks.pas со следующим +текстом:

unit DMTasks;

interface

@@ -23,7 +23,7 @@

procedure FirstDM;
var i,a: integer;
begin
-  TaskText(' mydm1. , ');
+  TaskText('Задание mydm1. Начертите, используя цикл');
  Field(14,8);
  DoToPoint(7,7);
  a:=6;
@@ -40,11 +40,11 @@   end;
end;

begin
-   RegisterGroup('mydm',' ','DMTasks',2);
+   RegisterGroup('mydm','Мои задания для Чертежника','DMTasks',2);
  RegisterTask('mydm1',FirstDM);
end.

-

( - ):

+

Наберем и запустим основную программу (сохранять ее в каком-либо файле не требуется):

uses Drawman, DMTasks;
@@ -52,9 +52,9 @@   Task('mydm1');
end.

-

:

+

Будет выведено следующее задание для Чертежника:

-

:

+

Добавим задание на разработку процедуры:

procedure DoCross;
begin
@@ -69,7 +69,7 @@ end;

procedure SecondDM;
begin
-  TaskText(' mydm2. , Cross');
+  TaskText('Задание mydm2. Начертите, используя процедуру Cross');
  Field(18,12);
  DoToPoint(3,8);
  DoCross;
@@ -81,15 +81,15 @@   DoCross;
end;

-

; :

+

Добавим вызов процедуры регистрации для данного задания; в результате секция инициализации примет следующий вид:

begin
-   RegisterGroup('mydm',' ','DMTasks',2);
+   RegisterGroup('mydm','Мои задания для Чертежника','DMTasks',2);
  RegisterTask('mydm1',FirstDM);
  RegisterTask('mydm2',SecondDM);
end.

-

:

+

Изменим основную программу:

uses Drawman, DMTasks;
@@ -97,24 +97,24 @@   Task('mydm2');
end.

-

:

+

При запуске этой программы в окне исполнителя Чертежник будет выведено новое задание:

- DMTasks - - PT4Load. -    -PT4Load -DM «», : +При первом запуске программы с подключенным модулем DMTasks созданная нами группа была автоматически зарегистрирована +в мастере по созданию программ-заготовок PT4Load. +Если теперь нажать кнопку  и в появившемся окне +PT4Load ввести префикс +DM в поле «Задание», то окно примет следующий вид:  

 

-

, mydm . +

Мы видим, что группа заданий mydm появилась в списке доступных групп для исполнителя Чертежник. Наберем имя задания mydm1:

-

Enter - DMmydm1.pas :

+

После нажатия клавиши Enter в рабочем каталоге будет создан +новый файл DMmydm1.pas со следующим содержимым:

uses Drawman, DMTasks;
@@ -124,7 +124,7 @@
end.

-

:)

+

Можно попытаться решить :)

diff --git a/PABCNetHelp/ForEducation/MakeModules/RobotMake.html b/PABCNetHelp/ForEducation/MakeModules/RobotMake.html index 8fabc6313..2153bfa52 100644 --- a/PABCNetHelp/ForEducation/MakeModules/RobotMake.html +++ b/PABCNetHelp/ForEducation/MakeModules/RobotMake.html @@ -22,12 +22,12 @@ -

RobotTaskMaker

+

Модуль RobotTaskMaker


- + Типы модуля RobotTaskMaker
@@ -36,14 +36,14 @@

type TaskProcType = procedure;

-

, . - ; - RegisterTask, . +

Тип процедуры, генерирующей конкретное задание. +Каждое задание реализуется в виде отдельной процедуры; для связывания этой процедуры +с именем задания необходимо использовать процедуру RegisterTask, описываемую ниже.

- + Процедуры модуля RobotTaskMaker
@@ -51,80 +51,80 @@

procedure Field(szx,szy: integer);

-

szx - szy .

+

Задает поле Робота размера szx +на szy клеток.

procedure HorizontalWall(x,y,len: integer);

-

len - (x, +

Создает горизонтальную стену длины len +и координатами левого верхнего угла (x, y).

procedure VerticalWall(x,y,len: integer);

-

len - (x, +

Создает вертикальную стену длины len +и координатами левого верхнего угла (x, y).

procedure RobotBegin(x,y: integer);

-

(x, +

Задает начальное положение Робота в клетке с координатами (x, y).

procedure RobotEnd(x,y: integer);

-

(x, +

Задает конечное положение Робота в клетке с координатами (x, y).

procedure RobotBeginEnd(x,y,x1,y1: integer);

-

(x, -y) (x1, +

Задает начальное положение Робота в клетке с координатами (x, +y) и конечное в клетке с координатами (x1, y1).

procedure Tag(x,y: integer);

-

(x, -y) .

+

Помечает клетку (x, +y) для закрашивания.

procedure TagRect(x,y,x1,y1: integer);

-

, - (x, -y) (x1, -y1), -.

+

Помечает прямоугольник из клеток, задаваемый координатами +противоположных вершин прямоугольника (x, +y) и (x1, +y1), для +закрашивания.

procedure MarkPainted(x,y: integer);

-

(x, -y) ( - ).

+

Закрашивает клетку (x, +y) (в задании некоторые клетки могут быть +уже закрашены).

procedure TaskText(s: string);

-

s.

+

Задает формулировку текста задания в строке s.

procedure RegisterGroup(name,description,unitname: string; count: integer);

-

PT4Load. - PT4Load , , - - . - name, - description, - unitname, , count. - 7 ( ) , - 999. - RegisterGroup - , . +

Обеспечивает автоматическую регистрацию новой группы заданий в программном модуле PT4Load. +В результате имя данной группы будет отображаться в окне модуля PT4Load в списке групп, связанных с исполнителем Робот, +что позволит создать программу-заготовку для выполнения любого задания этой группы. +В качестве параметров процедуры указывается имя группы name, +краткое описание группы description, +имя модуля unitname, в котором описана группа, и количество заданий count. +Имя группы заданий должно содержать не более 7 символов (цифр и латинских букв) и не должно оканчиваться цифрой, +количество заданий не должно превышать 999. +Процедура RegisterGroup должна +вызываться в секции инициализации модуля, содержащего реализацию новой группы заданий для Робота.

procedure RegisterTask(name: string; p: TaskProcType);

-

name p, . - . - RegisterGroup, RegisterTask -, . . +

Связывает имя задания name с процедурой p, в которой реализовано данное задание. +Данную процедуру следует вызывать для каждого задания. +Подобно описанной выше процедуре RegisterGroup, процедура RegisterTask должна вызываться в секции инициализации +модуля, содержащего реализацию новой группы заданий для Робота. Порядок вызова этих процедур может быть произвольным.

diff --git a/PABCNetHelp/ForEducation/MakeModules/RobotMakeCreation.html b/PABCNetHelp/ForEducation/MakeModules/RobotMakeCreation.html index 33f7a5895..656ba8186 100644 --- a/PABCNetHelp/ForEducation/MakeModules/RobotMakeCreation.html +++ b/PABCNetHelp/ForEducation/MakeModules/RobotMakeCreation.html @@ -10,11 +10,11 @@ -

+

Создание заданий для исполнителя Робот


-

- . RobTasks.pas -:

+

Опишем последовательность создания группы заданий для +исполнителя Робот. Создадим модуль RobTasks.pas со следующим +текстом:

unit RobTasks;

interface

@@ -22,7 +22,7 @@

implementation

procedure FirstRob;
begin
-   TaskText(' myrob1. ');
+   TaskText('Задание myrob1. Закрасить помеченные клетки');
  Field(10,6);
  HorizontalWall(0,3,4);
  VerticalWall(4,3,2);
@@ -33,27 +33,27 @@   Tag(6,2);
end;

begin
-   RegisterGroup('myrob',' ','RobTasks',2);
+   RegisterGroup('myrob','Мои задания для Робота','RobTasks',2);
  RegisterTask('myrob1',FirstRob);
end.

-

( - ):

+

Наберем и запустим основную программу (сохранять ее в каком-либо файле не требуется):

uses Robot, RobTasks;
begin
  Task('myrob1');
end.

-

: +

Будет выведено следующее задание для Робота:

- , :

+Добавим задание, в котором конфигурация поля случайна:

procedure SecondRob;
var n,i: integer;
begin
-   TaskText(' myrob2. ');
+   TaskText('Задание myrob2. Закрасить клетки под закрашенными');
  n:=Random(4)+7;
  Field(n,4);
  RobotBeginEnd(1,3,n,3);
@@ -67,39 +67,39 @@     end;
end;

-

; :

+

Добавим вызов процедуры регистрации для данного задания; в результате секция инициализации примет следующий вид:

begin
-   RegisterGroup('myrob',' ','RobTasks',2);
+   RegisterGroup('myrob','Мои задания для Робота','RobTasks',2);
  RegisterTask('myrob1',FirstRob);
  RegisterTask('myrob2',SecondRob);
end.

-

:

+

Изменим основную программу:

uses Robot, RobTasks;
begin
  Task('myrob2');
end.

-

:

+

При запуске этой программы в окне исполнителя Робот будет выведено новое задание:

- DMTasks - - PT4Load. -    -PT4Load -RB «», : +При первом запуске программы с подключенным модулем DMTasks созданная нами группа была автоматически зарегистрирована +в мастере по созданию программ-заготовок PT4Load. +Если теперь нажать кнопку  и в появившемся окне +PT4Load ввести префикс +RB в поле «Задание», то окно примет следующий вид:  

 

-

, myrob . +

Мы видим, что группа заданий myrob появилась в списке доступных групп для исполнителя Робот. Наберем имя задания myrob1:

 

-

Enter - RBmyrob1.pas :

+

После нажатия Enter в рабочем каталоге будет создан +новый файл RBmyrob1.pas со следующим содержимым:

uses Robot, RobTasks;

@@ -108,7 +108,7 @@
end.

-

:)

+

Можно приступать к решению собственноручно разработанной задачи :)

diff --git a/PABCNetHelp/ForEducation/MakeModules/index.html b/PABCNetHelp/ForEducation/MakeModules/index.html index 21f44572b..7241e8317 100644 --- a/PABCNetHelp/ForEducation/MakeModules/index.html +++ b/PABCNetHelp/ForEducation/MakeModules/index.html @@ -10,26 +10,26 @@ -

:

+

Конструкторы проверяемых заданий: обзор


-

PascalABC.NET - , - Programming Taskbook. - RobotTaskMaker, DMTaskMaker -PT4TaskMaker; RobotTaskMaker DMTaskMaker - , PT4TaskMaker - PT4TaskMakerNET. - :

-
  • RobotTaskMaker

    -
  • -
  • DMTaskMaker

    -
  • -
  • PT4TaskMakerNET:

    -
  • PT4TaskMakerNET:

    -
  • PT4TaskMakerNET:

    -
  • PT4TaskMakerNET:

    -
  • PT4TaskMakerNET:

    -
  • PT4TaskMakerNET: ,    

    +

    В системе PascalABC.NET можно +создавать проверяемые задания для исполнителей Робот и Чертежник, а также +для электронного задачника Programming Taskbook. +Задания разрабатываются с помощью конструкторов RobotTaskMaker, DMTaskMaker и +PT4TaskMaker; конструкторы RobotTaskMaker и DMTaskMaker +реализованы в виде одноименных модулей, конструктор PT4TaskMaker реализован в виде +модуля PT4TaskMakerNET. В данном разделе приводятся +подробные описания каждого из конструкторов и примеры их использования для создания новых заданий:

    + diff --git a/PABCNetHelp/ForEducation/MakeModules/tmaker_exam.html b/PABCNetHelp/ForEducation/MakeModules/tmaker_exam.html index 4e0e5206c..7f55f8497 100644 --- a/PABCNetHelp/ForEducation/MakeModules/tmaker_exam.html +++ b/PABCNetHelp/ForEducation/MakeModules/tmaker_exam.html @@ -10,73 +10,73 @@ -

    PT4TaskMakerNET: ,    

    +

    Модуль PT4TaskMakerNET: разработка заданий, связанных с ЕГЭ по информатике


    -

    Exam

    -

    4.10, Programming Taskbook - Pascal C++ - , : ExamBegin ExamTaskC. - , - -, -. Exam - - . , - , , , - , -. +

    Группы заданий Exam и их особенности

    +

    Начиная с версии 4.10, в базовый набор задачника Programming Taskbook +для языков Pascal и C++ входят +специальные группы заданий, связанные с ЕГЭ по информатике: ExamBegin и ExamTaskC. +Порядок выполнения заданий из этих групп имеет ряд особенностей, основной из которых +является отказ от применения специальных средств ввода-вывода, входящих в состав +задачника. В заданиях групп Exam для ввода-вывода надо применять стандартные средства +используемого языка программирования. Это позволяет максимально приблизить вид программы, +выполняющей задание, к виду, требуемому на экзамене, а также учесть при выполнении задания +его дополнительные особенности, связанные с организацией ввода исходных данных и форматированием +результатов.

    -

    PT4TaskMaker - , . - , . +

    С использованием конструктора учебных заданий PT4TaskMaker преподаватель может разрабатывать +новые группы заданий, связанные с ЕГЭ по информатике. При этом необходимо следовать +дополнительным правилам, основные из которых приводятся ниже.

    -
    1. , , , - Exam ( -, - -). -
    2. , - , 4.10, -Pascal C++. -
    3. , - - . -
    4. Exam , Exam. -
    5. , - ( DataS) - ( DataFileT ResultFileT ). -
    6. -( ). +
      1. Любые группы заданий, связанные с ЕГЭ по информатике, должны иметь имена, начинающиеся +с префикса Exam (для групп с этим префиксом задачник генерирует специальные программы-заготовки, +позволяющие использовать при выполнении задания стандартные средства ввода-вывода). +
      2. Необходимо проверять номер текущей версии задачника и текущий язык программирования, создавая +новую группу тольков случае, если версия имеет номер не ниже 4.10, а языком программирования является +Pascal или C++. +
      3. В преамбуле к группе заданий желательно отметить тот факт, что для ввода-вывода необходимо +использовать стандартные средства языка. +
      4. В новые группы Exam следует импортировать только те задания, которые также относятся к группам Exam. +
      5. Набор исходных и контрольных данных надо сохранять в текстовых файлах, передавая задачнику +информацию об именах этих файлов (процедурами DataS) и связывая содержимое этих файлов +с разделами исходных и результирующих данных (процедурами DataFileT и ResultFileT соответственно). +
      6. При любых вариантах наборов исходных данных соответствующие контрольные файлы не должны быть пустыми +(при наличии пустого файла результатов задачник считает запуск программы ознакомительным).
      -

      , PascalABC.NET ExamDemo. -, , , - , , C++ Pascal Delphi Lazarus, - , . - C#, . +

      Проиллюстрируем эти правила, разработав в среде PascalABC.NET демонстрационную группу заданий ExamDemo. +Задания, связанные с ЕГЭ, вполне допустимо разрабатывать и на других языках, поддерживаемых +конструктором учебных заданий, в частности, на языке C++ или на языке Pascal в средах Delphi или Lazarus, +причем полученные реализации не будут иметь никаких существенных отличий от реализации, приведенной ниже. +Задания можно разрабатывать даже на языке C#, несмотря на то что выполнять их на этом языке будет нельзя.

      -

      -

      , , . - , - . +

      Реализация сводной группы заданий

      +

      Напомним, что сводной группой называется группа, все задания которой импортированы из уже имеющихся групп. +Сводные группы оказываются очень полезными при составлении вариантов проверочных работ, поскольку +позволяют дать заданиям новые имена и тем самым затрудняют применение разного рода шпаргалок.

      -

      , , - , 1–4, . +

      Так как в сводных группах отсутствуют новые задания, при разработке сводных групп для заданий, связанных +с ЕГЭ по информатике, достаточно учесть правила 1–4, приведенные в предыдущем пункте.

      -

      , - PascalABC.NET (. «»). +

      Будем предполагать, что общие правила разработки новых +групп заданий в среде PascalABC.NET читателю известны (см. раздел «Примеры»).

      -

      ( , 9 - ), 1 -( Exam), - ExamDemo. PT4ExamDemo. +

      Следуя правилам именования групп (имя должно состоять из латинских букв и цифр, иметь длину не более 9 +символов и не оканчиваться цифрой), а также правилу 1 из предыдущего пункта +(наличие префикса Exam), +назовем нашу группу ExamDemo. Динамическая библиотека в этом случае должна иметь имя PT4ExamDemo.

      -

      ExamDemo Exam, . - ExamBegin ExamBegin71 ExamBegin72, - « » - . - ExamTaskC 12 ExamTaskC25–ExamTaskC36, - : . +

      Импортируем в группу ExamDemo несколько заданий из обеих групп Exam, входящих в базовый набор. +Из группы ExamBegin возьмем задания ExamBegin71 и ExamBegin72, +входящие в подгруппу «Преобразование массивов» +и связанные перестановкой элементов массива. +Из группы ExamTaskC возьмем серию из 12 заданий ExamTaskC25–ExamTaskC36, +объединенных общей предметной областью: сведениями об абитуриентах из различных школ.

      -

      , - 2 3 , ( PT4ExamDemo.pas): +

      Учитывая правила подготовки динамических библиотек с группами учебных заданий, +а также правила 2 и 3 из предыдущего пункта, получим следующий вариант нашей библиотеки (файл PT4ExamDemo.pas):

      library PT4ExamDemo;
       
      @@ -95,14 +95,14 @@ begin
         if (CurrentVersion < '4.10') or
            (CurrentLanguage and (lgPascal or lgCPP) = 0) then
           exit;
      -  CreateGroup('ExamDemo', '^  :   ',
      -    '. . , 2013', 'qdfedsag33gbg45j', 14, InitTask);
      -  CommentText('\P     ');
      -  CommentText('  -, ');
      -  CommentText(',    ');
      -  CommentText('  : ');
      -  CommentText('\MRead\m/\MReadln\m\:\MWrite\m/\MWriteln\m  ');
      -  CommentText('Pascal,  \Mcin\m\:\Mcout\m   C++.');
      +  CreateGroup('ExamDemo', '^ЕГЭ по информатике: примеры различных задач',
      +    'М. Э. Абрамян, 2013', 'qdfedsag33gbg45j', 14, InitTask);
      +  CommentText('\PПри выполнении заданий данной группы вместо');
      +  CommentText('специальных операций ввода-вывода, предоставляемых');
      +  CommentText('задачником, необходимо применять стандартные операции');
      +  CommentText('используемого языка программирования: процедуры');
      +  CommentText('\MRead\m/\MReadln\m\:\MWrite\m/\MWriteln\m для языка');
      +  CommentText('Pascal, потоки \Mcin\m\:\Mcout\m для языка C++.');
       end;
       
       procedure activate(S: string);
      @@ -113,55 +113,55 @@ end;
       begin
       end.
       
      -

      . PT4TaskMakerNET, - PascalABC.NET. - -InitTask, . - , - UseTask, - . - 71 72 ExamBegin 25–36 - ExamTaskC ( 14 ). +

      Кратко опишем полученную программу. Вначале к ней подключается модуль PT4TaskMakerNET, в котором +реализован конструктор учебных заданий для среды PascalABC.NET. +Затем следует описание основной процедуры группы заданий +InitTask, определяющей задание по его номеру. +Поскольку мы не создавали своих заданий, в данной процедуре +используется только стандартная процедура UseTask, позволяющая +импортировать задания из имеющихся групп. +В нашем случае импортируются задания с номерами 71 и 72 из группы ExamBegin и задания с номерами 25–36 +из группы ExamTaskC (всего 14 заданий).

      -

      . inittaskgroup -( , . . ). - CreateGroup, - : - ('ExamDemo'), ('^ : '), , - , (14) (InitTask). +

      Затем описывается процедура инициализации данной группы заданий. Она имеет стандартное имя inittaskgroup +(набранное строчными, т. е. маленькими буквами). В этой процедуре +вызывается процедура CreateGroup, в которой задаются +характеристики создаваемой группы: +имя ('ExamDemo'), описание ('^ЕГЭ по информатике: примеры различных задач'), сведения об авторе, +строковый ключ, число заданий (14) и основная процедура группы (InitTask).

      -

      , 4.10 - Pascal ++, CreateGroup - . , - inittaskgroup, ExamDemo . +

      Поскольку надо гарантировать, что группа будет создана только в случае использования задачника версии не ниже 4.10 +и только для языков Pascal и С++, перед вызовом процедуры инициализации группы CreateGroup выполняется проверка +перечисленных выше условий. Если хотя бы одно из условий нарушено, то выполняется немедленный выход из +процедуры inittaskgroup, и группа ExamDemo не создается.

      -

      - «^» - . - - PT4Demo PT4Load ( «^» -, «: : - »). +

      Следует обратить внимание на наличие символа-метки «^» в начале строки-описания группы. +Этот символ отменяет автоматическое преобразование к нижнему регистру +первой буквы описания при его выводе в программных модулях PT4Demo и PT4Load (если бы символ «^» +отсутствовал, то строка с описанием данной группы имела бы вид «Тема: еГЭ по информатике: +примеры различных задач»).

      -

      , 3, , - : - - ( - CommentText). - \M\m, . +

      Наконец, в соответствии с правилом 3, мы включили в создаваемую группу преамбулу, +в которой отмечается основная особенность данной группы: необходимость использования +стандартных средств ввода-вывода (для определения текста преамбулы вызываются +процедуры CommentText). Обратите внимание на управляющие +последовательности \M\m, позволяющие отобразить фрагмент текста моноширинным шрифтом.

      -

      inittaskgroup activate -( ), - ActivateNET, PT4TaskMakerNET. +

      После процедуры inittaskgroup описывается вспомогательная процедура activate +(ее имя также должно быть набрано строчными буквами), в которой необходимо вызвать +процедуру ActivateNET, описанную в модуле PT4TaskMakerNET.

      -

      , - PT4TaskMakerNET. PascalABC.NET - LIB PascalABC.NET, - . +

      Для успешной компиляции программы с созданной группой необходимо, чтобы ей был доступен +модуль PT4TaskMakerNET. Этот модуль входит в число стандартных модулей библиотеки системы PascalABC.NET +и размещается в подкаталоге LIB системного каталога PascalABC.NET, поэтому копировать его в рабочий каталог +не требуется.

      -

      , - , - . - PT4Load, - [Shift]+[Ctrl]+[L] «»; -: ExamDemo1. ExamDemo1.pas : +

      Для того чтобы при успешной компиляции можно было сразу просмотреть содержимое созданной группы, +достаточно использовать вспомогательную тестирующую программу, являющуюся заготовкой для выполнения +заданий из созданной группы. +Эту программу проще всего создать с помощью программного модуля PT4Load, +нажав комбинацию клавиш [Shift]+[Ctrl]+[L] и введя в поле «Задание»; имя первого задания +группы: ExamDemo1. В результате будет создан файл с именем ExamDemo1.pas со следующим содержимым:

      uses PT4Exam;
       
      @@ -170,82 +170,82 @@ begin
       
       end.
       
      -

      , - PT4, PT4Exam, , . +

      Следует обратить внимание на то, что к созданной программе подключается не традиционный модуль +задачника PT4, а специальный его вариант PT4Exam, используемый для заданий, связанных с ЕГЭ.

      -

      , - , , - Task «?»: Task('ExamDemo?'). +

      Для того чтобы тестирующая программа отображала задания в демонстрационном режиме, причем +при ее запуске на экране отображалось последнее из заданий, включенных в группу, достаточно заменить +в процедуре Task номер задания на символ «?»: Task('ExamDemo?').

      -

      ExamDemo14: +

      Теперь при запуске тестирующей программы на экране отобразится окно задачника с заданием ExamDemo14:

      -

      , - 4.11 , . - , - ( , ), - . -[F4]. : +

      По умолчанию окно задачника отображается в режиме с динамической компоновкой, который появился +в версии 4.11 и является более наглядным, чем режим с фиксированной компоновкой. Однако +при разработке заданий желательно применять режим с фиксированной компоновкой, поскольку +он позволит выявить недостатки форматирования (в частности, вертикального выравнивания данных), +присущие только этому режиму. Для переключения между режимами отображения данных достаточно нажать клавишу +[F4]. После выполнения этого действия окно задачника изменится следующим образом:

      -

      -( [Enter] [Backspace], - (. . «») . - , PascalABC.NET. -, -, . +

      В окне задачника можно просматривать все имеющиеся задания данной группы +(нажимая клавиши [Enter] и [Backspace], а также генерировать различные варианты исходных данных +и связанных с ними контрольных (т. е. «правильных») результатов. При закрытии окна +программа немедленно завершит работу, и мы вернемся в редактор среды PascalABC.NET. +Заметим, что при последующих запусках программы будет автоматически выбираться тот режим окна +задачника, в котором оно находилось в момент его предшествующего закрытия.

      -

      c html- ( , , - ), Task «?» - «#»: Task('ExamDemo#'). - ExamDemo14 - html- : +

      Для того чтобы cгенерировать html-страницу с описанием созданной группы (это позволяет, в частности, +увидеть текст преамбулы группы), достаточно в процедуре Task тестирующей программы заменить символ «?» +на символ «#»: Task('ExamDemo#'). +Теперь при запуске этой программы на экране вместо окна задачника с заданием ExamDemo14 +появится html-браузер с описанием созданной группы:

      -

      -

      . , - ExamBegin, . - ( ), - - . , - , . - , - . , , - ExamDemo2 (. , ). - -, ExamDemo2. +

      Добавление новых заданий

      +

      Добавим к нашей группе новые задания. Подобно заданиям, импортированным +из группы ExamBegin, они будут посвящены преобразованию массивов путем перестановки их элементов. +Если импортированные задания были посвящены инвертированию массива (или его части), то в новых +заданиях надо будет выполнить перестановку всех пар элементов или перестановку первой и второй +половины массива. Чтобы не уточнять действия в случае массивов нечетного размера, +добавим в задание условие о том, что исходный массив всегда имеет четный размер. +Тип элементов массива для подобных заданий является несущественным, поэтому будем обрабатывать +массивы вещественных чисел. Таким образом, набор исходных данных будет иметь вид, подобный +набору из задания ExamDemo2 (см. формулировку этого задания, приведенную на предыдущем рисунке). +Оформление вывода результатов также не будет отличаться от +оформления, требуемого в задании ExamDemo2.

      -

      , - , . +

      Прежде чем приступать к реализации заданий, добавим в начало нашей библиотеки +описание ряда вспомогательных переменных, процедур и функций.

      -

      - : +

      Первая функция упрощает генерацию случайных исходных данных вещественного типа +с не более чем двумя дробными знаками:

      function RandR(a, b: integer): real;
       begin
         result := RandomN(a*100, b*100)/100;
       end;
       
      -

      RandR RandomN, - , 4.11 ( RandomN(M, N) - , M..N, ). -RandR(a, b) (a b — ) , a..b - . - -; , , - . , 4.11 - RandomR, , - , -, . +

      При реализации функции RandR мы использовали функцию RandomN, входящую в состав +конструктора учебных заданий, начиная с версии 4.11 (функция RandomN(M, N) возвращает +случайное целое число, лежащее в диапазоне M..N, включая границы диапазона). Функция +RandR(a, b) (a и b — целые) возвращает вещественное число, лежащее в диапазоне a..b +и имеющее не более двух дробных знаков. Такие числа можно без потери точности +записывать в текстовый файл в формате с двумя дробными +знаками; таким образом, программа учащегося прочтет из файла именно то число, +которое было сгенерировано при инициализации задания. Напомним, что в версии 4.11 конструктора +имеется функция RandomR, также предназначенная для генерации случайных вещественных чисел, однако она +не позволяет фиксировать число дробных знаков, и поэтому менее пригодна для генерации +данных, предназначенных для записи в текстовые файлы.

      -

      , , - , : +

      Поскольку в обоих заданиях нам потребуется выполнять обмен значений, содержащихся в вещественных переменных, +опишем процедуру, которая выполняет подобный обмен:

      procedure SwapR(var a, b: real);
       var
      @@ -256,34 +256,34 @@ begin
         b := c;
       end;
       
      -

      Exam, - 5 (. ). : +

      Следующая группа вспомогательных переменных и процедур связана с особенностью заданий типа Exam, описанной +в правиле 5 (см. первый пункт данного раздела). Ввиду важности этого правила приведем его еще раз:

      -
      • , - ( DataS) - ( DataFileT ResultFileT ). +
        • Набор исходных и контрольных данных надо сохранять в текстовых файлах, передавая задачнику +информацию об именах этих файлов (процедурами DataS) и связывая содержимое этих файлов +с разделами исходных и результирующих данных (процедурами DataFileT и ResultFileT соответственно).
        -

        , Exam : +

        Таким образом, при инициализации каждого задания группы Exam надо выполнить следующие действия:

        -
        1. , ( - ; , , , - .tst). -
        2. . -
        3. . -
        4. . -
        5. , - -. -
        6. , - , — ; , -, - , -, - , ( ). +
          1. Сгенерировать имена файлов, содержащих исходные и контрольные данные (эти имена должны быть различными +и меняться при каждом тестовом испытании программы; кроме того, подобно всем файлам, используемым в заданиях, +они должны иметь расширение .tst). +
          2. Связать созданные имена с файловыми переменными и открыть эти файлы на запись. +
          3. Заполнить файлы необходимыми данными. +
          4. Закрыть файлы с исходными и контрольными данными. +
          5. Передать задачнику информацию об именах созданных файлов, чтобы при выполнении задания эта +информация была использована при связывании файлов со стандартными потоками ввода-вывода. +
          6. Передать задачнику информацию о том, что первый из созданных файлов должен +быть включен в раздел исходных данных, а второй — в раздел результатов; это, во-первых, позволит +отобразить содержимое файлов в окне задачника и, во-вторых, обеспечит проверку правильности +результирующего файла, созданного программой учащегося (путем его сравнения с данными контрольного файла).
          -

          3, . - Exam. - , (StartExam) - 1–2, (EndExam) — 4–6. - , - : +

          От условий конкретного задания будет зависеть только действие 3, связанное с заполнением файлов нужными данными. +Все остальные действия являются стандартными и должны выполняться при инициализации любого задания групп Exam. +Поэтому удобно оформить эти действия в виде двух вспомогательных процедур, одна из которых (StartExam) выполняет +начальные действия 1–2, а другая (EndExam) — завершающие действия 4–6. Поскольку в каждой из этих +процедур необходимо использовать имена созданных файлов и связанные с ними файловые переменные, эти переменные +удобно описать как глобальные:

          var
             f1,f2: text;
          @@ -312,57 +312,57 @@ begin
             ResultFileT(f2name, 1, 5);
           end;
           
          -

          . , StartExam, - pt1#####.tst ( -) pt2#####.tst ( ), , «#», - , . : - , .tst, - . , .tst - . +

          Обсудим особенности этих процедур. Имена файлов, создаваемых в процедуре StartExam, +имеют вид pt1#####.tst (для файла с исходными +данными) и pt2#####.tst (для файла с контрольными данными), причем в позициях, помеченных символом «#», +располагаются цифры, выбираемые случайным образом. Тем самым обеспечиваются все требования к именам файлов: +они генерируются случайным образом, имеют расширение .tst, и имя файла с исходными данными всегда отличается +от имени контрольного файла. Напомним, что все файлы с расширением .tst автоматически удаляются из рабочего каталога +после проверки учебного задания.

          -

          EndExam , - ( — . +

          При анализе процедуры EndExam следует обратить внимание на то, что информация о содержимом исходного файла +занимает всю область исходных данных (строки с первой по пятую — см. вызов процедуры DataFileT) -, , - , (. +и, таким образом, она скрывает +информацию об именах файлов, ранее выведенную в первой строке области исходных данных (см. вызовы процедур DataS). - , - , . - Exam , - - - («» ), - . +В обычном задании такая реализация была бы ошибочной, поскольку учащийся не увидел бы +на экране имена файлов и не понял бы, что эти имена необходимо ввести и обработать в его программе. +Однако в задании групп Exam именно такая реализация является правильной, поскольку +ввод имен файлов и связывание этих файлов со стандартными потоками ввода-вывода выполняется +автоматически («незаметно» для программы учащегося), и поэтому информацию +об именах файлов на экране отображать не следует.

          -

          , StartExam EndExam - : - StartExam, f1 f2 , , - EndExam. +

          Итак, наличие процедур StartExam и EndExam позволяет нам упростить +реализацию заданий: после определения формулировки любого задания нам достаточно +вызвать процедуру StartExam, заполнить файлы f1 и f2 исходными и, соответственно, +контрольными данными и вызвать процедуру EndExam.

          -

          . , - Exam1, m: m = 1 - , m = 2 — : +

          Приступим к непосредственной реализации заданий. Поскольку эти задания являются однотипными, +реализуем их в одной процедуре Exam1, снабдив ее параметром m: при m = 1 будет инициализироваться +первое задание, а при m = 2 — второе:

          procedure Exam1(m: integer);
           var
             n, i: integer;
             a: array[1..10] of real;
           begin
          -  CreateTask(' ');
          +  CreateTask('Преобразование массивов');
             case m of
             1:
             begin
          -    TaskText('          {N},', 0, 1);
          -    TaskText('    \=   {N}  .  ', 0, 2);
          -    TaskText('    ,   ,  .\,. ', 0, 3);
          -    TaskText('    ,   ', 0, 4);
          -    TaskText(' 7  .', 0, 5);
          +    TaskText('На вход в первой строке подается целое положительное четное число {N},', 0, 1);
          +    TaskText('а во второй строке \= массив из {N} вещественных чисел. Поменять местами', 0, 2);
          +    TaskText('его первый элемент со вторым, третий с четвертым, и т.\,д. Вывести', 0, 3);
          +    TaskText('преобразованный массив в одной строке, для каждого элемента', 0, 4);
          +    TaskText('отводить 7 экранных позиций.', 0, 5);
             end;
             2:
             begin
          -    TaskText('          {N},', 0, 2);
          -    TaskText('    \=   {N}  .  ', 0, 3);
          -    TaskText('     .   ', 0, 4);
          -    TaskText('  ,     7  .', 0, 5);
          +    TaskText('На вход в первой строке подается целое положительное четное число {N},', 0, 2);
          +    TaskText('а во второй строке \= массив из {N} вещественных чисел. Поменять местами', 0, 3);
          +    TaskText('первую и вторую половину элементов массива. Вывести преобразованный массив', 0, 4);
          +    TaskText('в одной строке, для каждого элемента отводить 7 экранных позиций.', 0, 5);
             end;
             end;
             StartExam;
          @@ -385,34 +385,34 @@ begin
             SetTestCount(3);
           end;
           
          -

          , CreateTask , - « ». - , ExamBegin71 ExamBegin72. +

          Обратите внимание на то, что при вызове процедуры CreateTask ей передается строковый параметр, содержащий +имя подгруппы «Преобразование массивов». Это обеспечивает включение новых заданий +в подгруппу, с которой связаны ранее импортированные в нашу группу задания ExamBegin71 и ExamBegin72.

          -

          10; -, . +

          Размер исходного массива всегда будет четным и не превосходящим 10; последнее условие необходимо для +того, чтобы все исходные данные можно было разместить на одной экранной строке.

          -

          . - -99 99, - 6 . +

          В обоих заданиях значения элементов исходного массива можно выбирать произвольным образом из некоторого диапазона. +Мы выбрали диапазон от -99 до 99, поскольку в этом случае при отображении чисел с двумя дробными знаками +они будут занимать не более 6 экранных позиций.

          -

          , - ExamBegin ExamTaskC. - , -: «:0:2». , , - 7 -( ExamBegin ExamTaskC, - ). : «:7:2». +

          При записи в файл элементов исходного массива между ними всегда располагается по одному пробелу, поскольку +такой порядок организации исходных данных принят во всех заданиях групп ExamBegin и ExamTaskC. Чтобы обеспечить +при этом отображение вещественных чисел с двумя дробными знаками, используется специальный набор форматирующих +атрибутов: «:0:2». При выводе результатов, согласно формулировке задания, +необходимо отводить для каждого элемента массива по 7 экранных позиций и выводить его с двумя дробными знаками +(последнее условие принято по умолчанию во всех заданиях групп ExamBegin и ExamTaskC, использующих +вещественные данные). Поэтому при выводе применяются другие форматирующие атрибуты: «:7:2».

          -

          , - . , - SetTestCount. +

          Так как алгоритм решения обеих задач не содержит ветвлений, для проверки его правильности +достаточно небольшого числа тестовых запусков. Мы установили это число равным трем, указав его +в качестве параметра процедуры SetTestCount.

          -

          Exam1 ( , 1 2) - InitTask, . - ExamBegin71 ExamBegin72, - « ». - 12 2: +

          Нам осталось включить вызовы процедуры Exam1 (с параметрами, равными 1 и 2) +в основную процедуру группы InitTask, связав эти вызовы с номерами заданий. Следует разместить новые +задания сразу после импортированных заданий ExamBegin71 и ExamBegin72, так как все эти задания +относятся к одной и той же подгруппе «Преобразование массивов». При этом номера +последних 12 заданий увеличатся на 2:

          procedure InitTask(num: integer);
           begin
          @@ -423,63 +423,63 @@ begin
             end;
           end;
           
          -

          2 CreateGroup, - ( 16). +

          Необходимо также увеличить на 2 пятый параметр процедуры CreateGroup, определяющий общее количество +заданий в группе (теперь это количество должно быть равно 16).

          - Task - «#» «?»: Task('ExamDemo?'). +Для просмотра новых заданий в окне задачника надо заменить в параметре процедуры Task +тестирующей программы символ «#» на «?»: Task('ExamDemo?').

          -

          [F9] -, - , . ExamDemo4 -(, Exam1 , 2): +

          При нажатии клавиши [F9] мы увидим на экране окно задачника в демо-режиме, в котором можно выбрать +и просмотреть все задания, включенные к настоящему моменту в нашу группу. Приведем вид окна для задания ExamDemo4 +(напомним, что это задание инициализируется посредством вызова процедуры Exam1 с параметром, равным 2):

          -

          -

          ExamDemo 12 , - ExamTaskC. ; - , . - , , - . +

          Добавление заданий повышенной сложности

          +

          Наша группа ExamDemo к настоящему моменту содержит 12 заданий повышенной сложности, импортированных +из группы ExamTaskC. Все эти задания связаны с общей предметной областью; они содержат сведения об +абитуриентах и включают их фамилии, номера школ и годы поступления в вузы. Для того чтобы проиллюстрировать +некоторые особенности, связанные с разработкой подобных заданий, дополним набор уже имеющихся заданий двумя +новыми заданиями из той же предметной области.

          -

          : - ( ) - . , , - ( — - ). : - . +

          Новые задания будут связаны с группировкой абитуриентов по школам: +для каждой школы надо найти связанный с ней минимальный (или максимальный) год +поступления абитуриента. Второе из двух заданий мы усложним, дополнительно потребовав, чтобы +полученные результаты были отсортированы по убыванию максимального года (а для одинаковых годов — +по возрастанию номера школы). Первое задание сделаем более простым: в нем результирующие данные +надо располагать по возрастанию номеров школ.

          -

          ( ), - — ( ). - , - . , , - , ( - , , - ; , - , - ). +

          При генерации наборов исходных данных нам потребуются не только числа (номера школ и годы поступления), +но и строковые данные — фамилии абитуриентов (хотя для выполнения этих заданий они не требуются). +Проще всего определить массив возможных фамилий достаточно большого размера, из которого выбирать +элементы случайным образом. Заметим, что в условии заданий не говорится о том, что все фамилии +в исходном наборе должны быть различными, поэтому совпадения фамилий вполне допустимы (если +в некоторой группе заданий все фамилии должны быть уникальными, то целесообразно дополнять их инициалами, +чтобы обеспечить большее разнообразие; кроме того, для таких заданий +при добавлении к набору исходных данных новой фамилии необходимо проверять, +что среди уже имеющихся элементов набора отсутствует данная фамилия с теми же инициалами).

          -

          40 -( , PascalABC.NET - ): +

          Добавим к нашей библиотеке вспомогательный массив фамилий из 40 элементов +(обратите внимание на то, что по правилам языка PascalABC.NET между описанием массива +и списком инициализирующих значений указывается знак присваивания):

          const
             famcount = 40;
           var
             fam: array[1..famcount] of string :=
          -  ('', '', '', '', '',
          -   '', '', '', '', '',
          -   '', '', '', '', '',
          -   '', '', '', '', '',
          -   '', '', '', '', '',
          -   '', '', '', '', '',
          -   '', '', '', '', '',
          -   '', '', '', '', '');
          +  ('Иванов', 'Петров', 'Сидоров', 'Кузнецов', 'Филиппов',
          +   'Сергеев', 'Александров', 'Петухов', 'Пономарев', 'Яшин',
          +   'Греков', 'Иванова', 'Кузнецова', 'Алексеева', 'Зайцев',
          +   'Волкова', 'Фролов', 'Юрьев', 'Бондарев', 'Семенов',
          +   'Семенова', 'Федченко', 'Марченко', 'Борисова', 'Петровский',
          +   'Беляева', 'Белкин', 'Лысенко', 'Сорокина', 'Пастухов',
          +   'Юрьева', 'Кондратьев', 'Тимофеев', 'Степанова', 'Якимов',
          +   'Юсов', 'Степанов', 'Руденко', 'Демидов', 'Леонидов');
           
          -

          , , - m, 1 2: +

          Оба новых задания, как и два предыдущих, +мы реализуем в виде одной процедуры с параметром m, принимающим значения 1 или 2:

          procedure Exam2(m: integer);
           var
          @@ -487,33 +487,33 @@ var
             a: array[1..100] of integer;
             nums: array[1..10] of integer;
           begin
          -  CreateTask('   ');
          +  CreateTask('Обработка сложных наборов данных');
             case m of
             1:
             begin
          -    TaskText('     .    ',0,1);
          -    TaskText('  {N},    {N}   ',0,2);
          -    TaskText('\(\M< > <> < >\m\)',0,3);
          -    TaskText('      ,      1990',0,4);
          -    TaskText(' 2010.    ,    ,',0,5);
          -    TaskText('       ( ',0,0);
          -    TaskText(' ,   ).     ',0,0);
          -    TaskText('        .',0,0);
          +    TaskText('На вход подаются сведения об абитуриентах. В первой строке указывается',0,1);
          +    TaskText('количество абитуриентов {N}, каждая из последующих {N} строк имеет формат',0,2);
          +    TaskText('\(\M<Год поступления> <Фамилия> <Номер школы>\m\)',0,3);
          +    TaskText('Номер школы содержит не более двух цифр, годы лежат в диапазоне от 1990',0,4);
          +    TaskText('до 2010. Для каждого номера школы, присутствующего в исходных данных,',0,5);
          +    TaskText('определить связанный с ним минимальный год поступления (вначале указывать',0,0);
          +    TaskText('номер школы, затем минимальный год). Сведения о каждой школе выводить',0,0);
          +    TaskText('на новой строке и упорядочивать по возрастанию номера школы.',0,0);
               k := 1;
               for i := 1 to 100 do
                 a[i] := 2100;
             end;
             2:
             begin
          -    TaskText('     .    ',0,1);
          -    TaskText('  {N},    {N}   ',0,2);
          -    TaskText('\(\M< > <> < >\m\)',0,3);
          -    TaskText('      ,      1990',0,4);
          -    TaskText(' 2010.    ,    ,',0,5);
          -    TaskText('       ( ',0,0);
          -    TaskText(' ,   ).     ',0,0);
          -    TaskText('        ,',0,0);
          -    TaskText('    \=    .',0,0);
          +    TaskText('На вход подаются сведения об абитуриентах. В первой строке указывается',0,1);
          +    TaskText('количество абитуриентов {N}, каждая из последующих {N} строк имеет формат',0,2);
          +    TaskText('\(\M<Номер школы> <Фамилия> <Год поступления>\m\)',0,3);
          +    TaskText('Номер школы содержит не более двух цифр, годы лежат в диапазоне от 1990',0,4);
          +    TaskText('до 2010. Для каждого номера школы, присутствующего в исходных данных,',0,5);
          +    TaskText('определить связанный с ним максимальный год поступления (вначале указывать',0,0);
          +    TaskText('максимальный год, затем номер школы). Сведения о каждой школе выводить',0,0);
          +    TaskText('на новой строке и упорядочивать по убыванию максимального года,',0,0);
          +    TaskText('а для совпадающих годов \= по возрастанию номера школы.',0,0);
               k := -1;
               for i := 1 to 100 do
                 a[i] := 0;
          @@ -572,75 +572,75 @@ begin
             SetTestCount(5);
           end;
           
          -

          . - . , - . - ExamTaskC, . +

          Обсудим детали реализации этих заданий. Начальная часть их формулировки +посвящена описанию предметной области и является стандартной для данной серии заданий. Обратите внимание на то, что +поля исходных записей в заданиях указываются в различном порядке. +Этот прием используется во всех сериях группы ExamTaskC, чтобы обеспечить большее разнообразие входящих в них задач.

          -

          TaskText 0. - , - , , - . - . +

          При определении завершающей части формулировки заданий последний параметр процедур TaskText полагается равным 0. +Это означает, что в режиме окна с фиксированной компоновкой данные строки +при первоначальном отображении задания не видны на экране, однако их можно просмотреть, используя +прокрутку раздела с формулировкой задания. В режиме с динамической компоновкой полный текст формулировки задания +сразу отображается на экране.

          -

          : a () , - nums ( ). - , - - . +

          В процедуре используются два массива: массив a предназначен для хранения контрольных (правильных) результатов, +а массив nums является вспомогательным (его назначение описывается далее). +Для хранения исходных данных массив не предусматривается, поскольку +после генерации полей очередной записи они будут немедленно записываться +в исходный файл и обрабатываться.

          -

          n. -, , ( «»), - «» - . - CurrentTest, 4.11 -PT4TaskMaker, «» : - - ( - ), — ( - « »). ( - ) n - 10..20, 50..100. +

          Количество записей в исходном наборе данных записывается в переменную n. +Наборы, содержащие небольшое число записей, удобны при отладке программы (благодаря своей «обозримости»), +в то время как большие наборы позволяют проверить программу в «реальной» ситуации и тем самым +окончательно убедиться в правильности алгоритма. +Используя функцию CurrentTest, добавленную в версию 4.11 конструктора +PT4TaskMaker, мы обеспечили дополнительную «настройку» процесса генерации исходных данных: +при первом тестовом запуске +программы с решением задачи ей всегда предлагается набор из небольшого количества записей (что упрощает поиск +и исправление ошибок), а при втором тестовом запуске — большой набор записей (что позволяет проверить предложенный +алгоритм «на прочность»). При последующих тестовых запусках (а также при демонстрационном +и ознакомительном запуске программы) значение n с равной вероятностью +выбирается либо из диапазона 10..20, либо из диапазона 50..100.

          -

          n (10–20) - : - 1–100, - - , -/ . , nums 10 -, 10 , - . +

          В случае генерации исходных данных для указанных заданий при небольших значениях n (10–20) +возникает дополнительная проблема: +если выбирать случайным образом номера школ из всего допустимого диапазона 1–100, +то с большой вероятностью каждый номер школы появится в наборе исходных данных +всего по одному разу, что не позволит проверить правильность реализованного в программе алгоритма нахождения +минимального/максимального значения. Чтобы решить эту проблему, используется вспомогательный массив nums из 10 +элементов, в который заносятся 10 случайно выбранных номеров школ, +после чего номера школ для исходного набора записей выбираются уже из этого набора номеров.

          -

          , , . - , - . , , -( ), - , -( ), - . - , - — ( ), — -( ExamTaskC). +

          В любом задании, связанном с нахождением набора записей, обычно требуется отсортировать полученный набор. +Задание должно быть сформулировано таким образом, чтобы обеспечить +однозначный порядок вывода полученных данных. В частности, если поле, по которому выполняется сортировка +(главный ключ сортировки), +может содержать одинаковые значения, то обязательно следует указать дополнительное поле +(подчиненный ключ сортировки), +по которому надо сортировать записи с одинаковым главным ключом. +При выводе отсортированных данных вначале надо располагать главный ключ, +после него — подчиненные ключи (если они имеются), затем — остальные поля +(такой порядок вывода принят во всех заданиях группы ExamTaskC).

          -

          a - , , - «» ( 0). - , - a ( ). -, , - , . +

          Для упорядочивания результатов во втором задании вместо сортировки массива a по убыванию +используется другой алгоритм, связанный с последовательным нахождением максимального элемента, выводом +этого элемента и его «порчей» (заменой его значения на 0). Обычная сортировка массива +в данном случае не позволит получить требуемый набор данных, так как при перемене местами значений +элементов в массиве a будет потеряна связь с номером школы (который определяется по индексу элемента). +Заметим, что возможен и вариант получения упорядоченного набора данных с помощью сортировки, +однако для этого надо использовать массив записей, полями которых являются максимальный год и номер школы.

          -

          : -() — ( ), () — -( ). - - , a - , . +

          Во втором задании результаты должны упорядочиваться по набору ключей: первый +(главный) ключ — максимальный год (сортируется по убыванию), второй (подчиненный) ключ — номер школы +(сортируется по возрастанию). +Использованный нами способ упорядочивания обеспечивает автоматическую сортировку +по подчиненному ключу, так как при поиске очередного максимума массив a перебирается +по возрастанию индексов, и поэтому в результате находится номер первого максимального элемента.

          -

          Exam2 . +

          Прочие фрагменты процедуры Exam2 дополнительных комментариев не требуют.

          -

          Exam2 case InitTask, - 17 18: +

          Вызов процедуры Exam2 надо добавить в конец оператора case процедуры InitTask, связав его +с номерами 17 и 18:

          procedure InitTask(num: integer);
          @@ -653,29 +653,29 @@ begin
             end;
           end;
           
          -

          , CreateGroup, -, 18. +

          Кроме того, необходимо опять откорректировать параметр процедуры CreateGroup, определяющий количество +заданий, положив его равным 18.

          -

          [F9] -( ): +

          При нажатии клавиши [F9] на экране появится окно задачника с последним заданием данной группы +(на рисунке приведен вид окна после прокрутки раздела с формулировкой задания):

          -

          «?» «# » - Task , - [F9] html- , - , : +

          Если теперь опять заменить символ «?» на символ «# » +в параметре процедуры Task тестирующей программы, +то при нажатии [F9] мы увидим html-страницу с описанием группы, которое теперь содержит +не только импортированные, но и реализованные нами задания:

          -

          CreateTask - ( ), - : ExamDemo3 ExamDemo4 — -« », ExamDemo17 ExamDemo18 — -« ». +

          Поскольку при создании новых заданий мы указали в качестве параметра процедур CreateTask +названия подгрупп (и разместили новые задания после заданий из данных подгрупп), +новые задания отображаются в составе этих подгрупп: ExamDemo3 и ExamDemo4 — в подгруппе +«Преобразование массивов», а ExamDemo17 и ExamDemo18 — в подгруппе +«Обработка сложных наборов данных».

          diff --git a/PABCNetHelp/ForEducation/MakeModules/tmaker_format.html b/PABCNetHelp/ForEducation/MakeModules/tmaker_format.html index 1a24f4b81..145532dfa 100644 --- a/PABCNetHelp/ForEducation/MakeModules/tmaker_format.html +++ b/PABCNetHelp/ForEducation/MakeModules/tmaker_format.html @@ -10,128 +10,128 @@ -

          PT4TaskMakerNET:

          +

          Модуль PT4TaskMakerNET: форматирование текста заданий


          -

          -

          PT4TaskMaker , - . -(), - \. +

          Общие сведения

          +

          В конструкторе учебных заданий PT4TaskMaker предусмотрена возможность форматирования текста заданий, а также +преамбул для группы и ее подгрупп. Форматирование выполняется с помощью набора управляющих последовательностей +(команд), +большинство из которых имеет вид \символ.

          - , - : +Используя управляющие последовательности, можно выполнять следующие +действия по форматированию текста в окне задачника:

            -
          • , Symbol ; -
          • ; -
          • ; -
          • , ( - ); -
          • , ( , - ). +
          • добавлять в текст специальные символы, в том числе символы шрифта Symbol и буквы западноевропейских языков; +
          • выделять фрагмент текста полужирным шрифтом; +
          • использовать в тексте нижние и верхние индексы; +
          • добавлять в текст задания ссылки на другие задания этой же группы, не указывая при этом название группы (что позволяет +корректно изменять эти ссылки при включении задания в другие группы); +
          • добавлять в текст задания элементы, зависящие от текущего языка программирования (в частности, +обозначения логических констант).
          -

          , - html- . ( , ) - , . +

          Все описанные выше действия обеспечивают требуемое форматирование текста задания как в окне задачника, +так и в html-описании данного задания. Аналогичное форматирование (в частности, использование нижних и верхних индексов) +можно применять и в текстах комментариев, которые выводятся в окне задачника в разделах исходных и результирующих данных.

          -

          , , , - ( ) - html- . : +

          Кроме того, имеются управляющие последовательности, не влияющие на текст задания в окне задачника, однако +обеспечивающие дополнительное форматирование этого текста (и текста комментариев для группы и ее подгрупп) +в html-описании задания или группы заданий. Данные управляющие последовательности позволяют:

            -
          • ; -
          • ( - , ); -
          • ; -
          • ; -
          • , - . +
          • выделять имена переменных курсивом; +
          • использовать более разнообразное выделение фрагментов текста (помимо полужирного начертания можно установить +курсивное начертание, выделение моноширинным шрифтом и специальное выделение); +
          • разбивать текст задания и преамбулы на отдельные абзацы; +
          • устанавливать для требуемых фрагментов текста режим вывода с центрированием или с отступом; +
          • обеспечивать вывод фрагментов текста в несколько столбцов, с возможностью установки способа выравнивания +для каждого столбца.
          -

          , html- Task, - ( ) #. , html- - PT4Demo, - . +

          Напомним, что для вывода на экран html-страницы с описанием задания или группы заданий достаточно вызвать процедуру Task, +указав в конце ее параметра (имени задания или группы заданий) суффикс #. Кроме того, html-страницы +с описанием групп заданий можно генерировать с помощью модуля PT4Demo, используя кнопку +в окне этого модуля.

          -

          -

          , , - ( S TaskText), -( Cmt Data Result), - () -( S CommentText). +

          Таблица управляющих последовательностей

          +

          Управляющие последовательности, приведенные в таблице, можно использовать в формулировках +заданий (параметр S процедуры TaskText), комментариях к исходным и результирующим данным +(параметр Cmt в процедурах групп Data и Result), +а также в дополнительных описаниях (преамбулах) групп и подгрупп учебных заданий +(параметр S в процедуре CommentText).

          -

          , Data Result, - (. « »). - , S CommentText, - html- (. «Html-»). - , S TaskText, - , html-. +

          Управляющие последовательности, использованные в параметрах процедур групп Data и Result, влияют только на представление соответствующих +комментариев в окне задачника (см. столбец «Окно задачника»). +Управляющие последовательности, использованные в параметре S процедуры CommentText, обеспечивают соответствующее форматирование +преамбулы к группе заданий и ее подгруппам в тексте html-страницы с описанием группы заданий (см. столбец «Html-страница»). +Управляющие последовательности, использованные в параметре S процедуры TaskText, влияют на вид +формулировок заданий как в окне задачника, так и в html-описаниях.

          -

          \, , - , html-. +

          Все последовательности вида \символ, не указанные в приведенной ниже таблице, игнорируются как при выводе текста в +окне задачника, так при его отображения в виде html-страницы.

          -

          , CreateTask -( SubgroupName), - , CreateGroup ( GroupDescription), - . - , html-. - (–) (—) - : -- ---. 4.10, - html- . +

          В заголовках подгрупп, указываемых в процедуре CreateTask +(параметр SubgroupName), а также в +тексте краткого описания группы, указываемого в процедуре CreateGroup (параметр GroupDescription), +управляющие последовательности не обрабатываются. При указании в этих строках управляющих последовательностей +они дословно воспроизводятся и в окне задачника, и в html-описании. +Для указания короткого (–) или длинного (—) тире в кратких описаниях и заголовках подгрупп можно использовать +двойные и тройные дефисы соответственно: -- и ---. Начиная с версии задачника 4.10, двойные и тройные дефисы +в заголовках подгрупп при их отображении в html-описаниях заменяются на короткие и длинные тире.

          @@ -140,10 +140,10 @@ Html- \, @@ -200,13 +200,13 @@ Html- \Q @@ -214,7 +214,7 @@ Html- @@ -223,7 +223,7 @@ Html- \\ @@ -600,26 +600,26 @@ ANSI Latin-1 ( @@ -627,7 +627,7 @@ ANSI Latin-1 ( \R @@ -766,10 +766,10 @@ ANSI Latin-1 ( _{ @@ -817,10 +817,10 @@ ANSI Latin-1 ( \B @@ -913,7 +913,7 @@ ANSI Latin-1 ( { @@ -1004,14 +1004,14 @@ ANSI Latin-1 ( \[ @@ -1020,14 +1020,14 @@ ANSI Latin-1 ( \] @@ -1036,14 +1036,14 @@ ANSI Latin-1 ( \( @@ -1052,14 +1052,14 @@ ANSI Latin-1 ( \) @@ -1068,9 +1068,9 @@ ANSI Latin-1 ( \J
          - +Команда - +Описание - +Окно задачника -Html- +Html-страница
          - +Ссылки на другие задания данной группы
          -\ +\число - - , ( *********, - 1) +Имя задания +из текущей группы с номером, меньшим текущего на величину указанного десятичного числа (или *********, +если результирующий номер оказывается меньшим 1)
          -\0 +\0число - - , -( *********, - 999) +Имя задания +из текущей группы с номером, большим текущего на величину указанного десятичного числа +(или *********, +если результирующий номер оказывается большим 999)
          - +Пробелы
          - +Малый неразрывный пробел - +Игнорируется &nbsp; @@ -155,10 +155,10 @@ Html- \; - +Средний неразрывный пробел - +Пробел &nbsp; @@ -170,10 +170,10 @@ Html- ~ - +Обычный неразрывный пробел - +Пробел &nbsp; @@ -185,13 +185,13 @@ Html- \q - +Большой пробел - +Игнорируется -&nbsp;&nbsp; +Пробел&nbsp;Пробел&nbsp;
          - +Двойной большой пробел - +Игнорируется -2 +2 копии большого пробела
          - +Символы
          - (\) +Обратная косая черта (\) \ @@ -238,7 +238,7 @@ Html- \& - (&) +Амперсанд (&) & @@ -254,7 +254,7 @@ Html- \{ - ({) +Открывающая фигурная скобка ({) { @@ -269,7 +269,7 @@ Html- \} - (}) +Закрывающая фигурная скобка (}) } @@ -284,7 +284,7 @@ Html- \~ - «» (~) +Символ «волна» (~) ~ @@ -299,7 +299,7 @@ Html- \^ - «» (^) +Символ «шапочка» (^) ^ @@ -314,7 +314,7 @@ Html- \_ - (_) +Символ подчеркивания (_) _ @@ -329,10 +329,10 @@ Html- \. - (…) +Многоточие (…) -...
          ( ) +...
          (три точки)
          &#8230; @@ -344,7 +344,7 @@ Html- \= - (—) +Длинное тире (—) @@ -359,7 +359,7 @@ Html- \: - , (–) +Символ диапазона, или короткое тире (–) @@ -374,7 +374,7 @@ Html- \- - «» (−) +Символ «минус» (−) @@ -389,7 +389,7 @@ Html- \< - («) +Открывающие угловые кавычки («) « @@ -404,7 +404,7 @@ Html- \> - (») +Закрывающие угловые кавычки (») » @@ -419,7 +419,7 @@ Html- \* - (·) +Символ умножения (·) · @@ -434,7 +434,7 @@ Html- \+ - «-» (±) +Символ «плюс-минус» (±) ± @@ -449,7 +449,7 @@ Html- \o - (°) +Символ градуса (°) ° @@ -464,7 +464,7 @@ Html- \x - « » (×) +Символ «косой крест» (×) × @@ -479,7 +479,7 @@ Html- \a - «» (α) +Греческая буква «альфа» (α) α @@ -494,7 +494,7 @@ Html- \p - «» (π) +Греческая буква «пи» (π) π @@ -509,7 +509,7 @@ Html- \e - «» (ε) +Греческая буква «эпсилон» (ε) ε @@ -524,7 +524,7 @@ Html- \l - « » (≤) +Символ «меньше или равно» (≤) @@ -539,7 +539,7 @@ Html- \g - « » (≥) +Символ «больше или равно» (≥) @@ -554,7 +554,7 @@ Html- \n - « » (≠) +Символ «не равно» (≠) @@ -569,7 +569,7 @@ Html- \X - «bullet» (•) +Символ «bullet» (•) @@ -581,18 +581,18 @@ Html-
          -\hXX, XX — 16- +\hXX, где XX — двузначное 16-ричное число - XX -ANSI Latin-1 ( 1252) +Символ с кодом XX из второй половины кодовой таблицы для западноевропейских языков +ANSI Latin-1 (кодовая страница 1252) - +Соответствующий символ &#DDD;
          -(DDD — Unicode) +(DDD — десятичный код соответствующего символа в кодировке Unicode)
          -\HXX, XX — 16- +\HXX, где XX — двузначное 16-ричное число - XX Windows- Symbol +Символ с кодом XX Windows-шрифта Symbol - +Соответствующий символ &#DDD;
          -(DDD — Unicode)
          -
          <font face="Symbol">&#DDD;</font>
          -(DDD — , 16- XX) +(DDD — десятичный код соответствующего символа в кодировке Unicode)
          +или
          <font face="Symbol">&#DDD;</font>
          +(DDD — десятичное число, равное 16-ричному числу XX)
          - , +Элементы текста, зависящие от текущего языка программирования
          - +Метка начала квадратного корня Sqrt(
          @@ -635,7 +635,7 @@ ANSI Latin-1 ( sqrt(
          (C++, Python, Java)
          Sqr(
          -(Visual Basic 5  6)
          +(Visual Basic версий 5 и 6)
          ( @@ -647,7 +647,7 @@ ANSI Latin-1 ( \r - +Метка конца квадратного корня )
          @@ -662,7 +662,7 @@ ANSI Latin-1 ( \t
          - «True» +Логическая константа «True» True (Pascal, PascalABC.NET, Visual Basic, VB.NET, Python)
          @@ -675,7 +675,7 @@ ANSI Latin-1 ( \f
          - «False» +Логическая константа «False» False (Pascal, PascalABC.NET, Visual Basic, VB.NET, Python)
          @@ -688,7 +688,7 @@ ANSI Latin-1 ( \N
          - +Нулевой указатель nil (Pascal)
          @@ -701,7 +701,7 @@ ANSI Latin-1 ( \O
          - +Нулевая ссылка для объекта null (C#, Java)
          @@ -716,7 +716,7 @@ ANSI Latin-1 ( \d
          - , +Имя функции для освобождения ресурсов, выделенных объекту Dispose (PascalABC.NET, C#, VB.NET)
          @@ -726,38 +726,38 @@ ANSI Latin-1 (
          - +Индексы
          -_ +_символ - +Односимвольный нижний индекс -C +Cимвол выводится как нижний индекс -<sub></sub> +<sub>символ</sub>
          -^ +^символ - +Односимвольный верхний индекс -C +Cимвол выводится как верхний индекс -<sup></sup> +<sup>символ</sup>
          - +Метка начала многосимвольного нижнего индекса - +Переход в режим нижнего индекса <sub> @@ -781,10 +781,10 @@ ANSI Latin-1 ( ^{ - +Метка начала многосимвольного верхнего индекса - +Переход в режим верхнего индекса <sup> @@ -796,19 +796,19 @@ ANSI Latin-1 ( } - ( ) +Метка конца текущего (верхнего или нижнего) многосимвольного индекса - +Выход из режима индекса -</sub>

          </sup> +</sub>
          или
          </sup>
          - ( ) +Выделение (в окне задачника любой режим выделения приводит к выделению полужирным шрифтом)
          - +Метка начала полужирного выделения - +Переход в режим выделения <b> @@ -832,10 +832,10 @@ ANSI Latin-1 ( \b - +Метка конца полужирного выделения - +Выход из режима выделения </b> @@ -847,10 +847,10 @@ ANSI Latin-1 ( \I - +Метка начала курсивного выделения - +Переход в режим выделения <i> @@ -862,10 +862,10 @@ ANSI Latin-1 ( \i - +Метка конца курсивного выделения - +Выход из режима выделения </i> @@ -877,10 +877,10 @@ ANSI Latin-1 ( \S - +Метка начала специального выделения - +Переход в режим выделения <span class="ptSpecial"> @@ -892,10 +892,10 @@ ANSI Latin-1 ( \s - +Метка конца специального выделения - +Выход из режима выделения </span> @@ -904,7 +904,7 @@ ANSI Latin-1 (
          - html- ( ) +Дополнительное форматирование html-страниц (в окне задачника данные управляющие последовательности игнорируются)
          - +Метка начала выделения переменной   @@ -928,7 +928,7 @@ ANSI Latin-1 ( } - +Метка конца выделения переменной   @@ -943,7 +943,7 @@ ANSI Latin-1 ( \M - +Метка начала моноширинного текста   @@ -958,7 +958,7 @@ ANSI Latin-1 ( \m - +Метка конца моноширинного текста   @@ -973,7 +973,7 @@ ANSI Latin-1 ( \| - +Разрыв строки   @@ -988,14 +988,14 @@ ANSI Latin-1 ( \P - +Начало нового абзаца   - ptTaskContinue ( ) - ptComment ( ) +Завершается предыдущий абзац и создается абзац стиля ptTaskContinue (при использовании в формулировке задания) +или ptComment (при использовании в тексте преамбулы)
          - +Метка начала абзаца с центрированием   - ptTaskCenter ( ) - ptCommentCenter ( ) +Завершается предыдущий абзац и создается абзац стиля ptTaskCenter (при использовании в формулировке задания) +или ptCommentCenter (при использовании в тексте преамбулы)
          - +Метка конца абзаца с центрированием   - ptTaskContinue ( ) - ptCommentContinue ( ) +Завершается предыдущий абзац и создается абзац стиля ptTaskContinue (при использовании в формулировке задания) +или ptCommentContinue (при использовании в тексте преамбулы)
          - +Метка начала абзаца с отступом   - ptTaskQuote ( ) - ptCommentQuote ( ) +Завершается предыдущий абзац и создается абзац стиля ptTaskQuote (при использовании в формулировке задания) +или ptCommentQuote (при использовании в тексте преамбулы)
          - +Метка конца абзаца с отступом   - ptTaskContinue ( ) - ptCommentContinue ( ) +Завершается предыдущий абзац и создается абзац стиля ptTaskContinue (при использовании в формулировке задания) +или ptCommentContinue (при использовании в тексте преамбулы)
          - ( - r, l, c, - &) +Метка начала режима выравнивания по столбцам (после нее +указывается последовательность символов r, l, c, которая +должна оканчиваться символом &)   @@ -1085,7 +1085,7 @@ ANSI Latin-1 ( \j - +Метка конца режима выравнивания по столбцам   @@ -1100,236 +1100,236 @@ ANSI Latin-1 ( & - +Переход к новому столбцу в режиме выравнивания по столбцам   - <td> ; - <tr> +Добавляется тег <td> с соответствующим выравниванием; +для первого столбца предварительно указывается тег <tr>

          -

          +

          Дополнительные сведения об использовании управляющих последовательностей

          -

          , - ( UseTask), - , - . , , - . - , , - . - «» , - - UseTask. +

          Необходимость в специальных командах для генерации ссылок на другие задания группы объясняется тем, что любое имеющееся задание может быть +импортировано в группу с другим именем (с помощью процедуры UseTask), +и поэтому все ссылки на другие задания этой группы также потребуется откорректировать, +указав в них новое имя группы. Разумеется, в подобной ситуации необходимо переносить в новую группу все задания, содержащие +ссылки друг на друга. +Следует заметить, что разность между номерами ссылающихся друг на друга заданий не обязана быть такой же, +как в исходной группе заданий. +Если в новой группе задания находятся на другом «расстоянии» друг от друга, то +для указания правильной ссылки достаточно внести +соответствующую поправку в параметр процедуры UseTask.

          -

          , - html-, - ( , TeX, - ). - : +

          Наличие нескольких видов неразрывных пробелов, +не различающихся в тексте заданий и html-страниц, связано с планируемой +в дальнейшем возможностью генерации текста заданий в других форматах (в частности, в формате системы TeX, в котором +данные виды пробелов различаются). Приведем рекомендации по использованию +неразрывных пробелов:

            -
          • =, <, > ~; - (> 0), - : (>\,0); -
          • ~ : ~{a} ~{b}; -
          • + \;; -
          • \* / ; - , ; - . +
          • вокруг символов =, <, > указывается обычный неразрывный пробел ~; +исключением являются фрагменты текста в скобках вида (> 0), в которых рекомендуется использовать +малый пробел: (>\,0); +
          • неразрывный пробел ~ указывается также между текстом и переменной: стороны~{a} и~{b}; +
          • вокруг символов + и ставится средний пробел \;; +
          • символы умножения \* и деления / пробелами не обрамляются; +исключением служит ситуация, когда слева и справа от символа деления указываются прописные буквы; в этом случае желательно использовать +обрамление малыми пробелами.
          -

          ( Begin39; - , , , - ): +

          Приведем пример оформления формул (данный пример взят из задания Begin39; обратите внимание +на выделение переменных с помощью фигурных скобок, а также на команды, обеспечивающие вывод индексов, +выделение квадратного корня и центрирование формулы):

          -
          TaskText('  \I \i ' +
          -  '{A}\*{x}^2\;+\;{B}\*{x}\;+\;{C}~=~0, ', 0, 1);
          -TaskText(' ~{A}, {B}, {C} ' +
          -  '(~{A}  ~0),  ,', 0, 2);
          -TaskText('   . ' +
          -  '  ,  ',0,3);
          -TaskText('   .   ' +
          -  '   ', 0, 4);
          +
          TaskText('Найти корни \Iквадратного уравнения\i ' +
          +  '{A}\*{x}^2\;+\;{B}\*{x}\;+\;{C}~=~0, заданного', 0, 1);
          +TaskText('своими коэффициентами~{A}, {B}, {C} ' +
          +  '(коэффициент~{A} не равен~0), если известно,', 0, 2);
          +TaskText('что дискриминант уравнения положителен. ' +
          +  'Вывести вначале меньший, а затем',0,3);
          +TaskText('больший из найденных корней. Корни квадратного ' +
          +  'уравнения находятся по формуле', 0, 4);
           TaskText('\[{x}_{1,\,2}~=~(\-{B}\;\+\;\R{D}\r)/(2\*{A}),\] ' +
          -  ' {D}~\= \I\i, ' +
          -  ' {B}^2\;\-\;4\*{A}\*{C}.', 0, 5);
          +  'где {D}~\= \Iдискриминант\i, ' +
          +  'равный {B}^2\;\-\;4\*{A}\*{C}.', 0, 5);
           
          -

          : +

          В результате обработки данной формулировки задания в окне задачника будет выведен текст:

          -

          html- : +

          В html-описании этот же текст будет отформатирован следующим образом:

          -

          \< \>. +

          Для указания кавычек в тексте задания следует использовать управляющие последовательности \< и \>.

          -

          \t, \f, \N, \O - , , - . +

          Управляющие последовательности \t, \f, \N, \O +для логических констант, нулевых указателей и объектов генерируют текст, зависящий от +выбранного в данный момент языка программирования.

          -

          , \q, \Q, \P, \[, \(, -\], \), \| &, -( html-). +

          Обычные пробелы, указанные после управляющих последовательностей \q, \Q, \P, \[, \(, +\], \), \| и &, учитываются только в тексте задачника +(и пропускаются в тексте html-страниц).

          -

          , \S \s, - , html- - , - , -( html- «Begin39»). - , (, - , , - «» ). +

          Режим специального выделения, устанавливаемый парными командами \S и \s, +в окне задачника приводит к выделению полужирным шрифтом, а в html-описании +обеспечивает выделение фрагмента текста, +аналогичное выделению, используемому для имени задания в начале его формулировки +(в приведенном выше фрагменте html-описания так выделено имя задания «Begin39»). +Данный режим рекомендуется использовать для выделения заголовков, размещаемых в начале абзаца (например, +если формулировка задания завершается абзацем, содержащим указание, то с помощью специального выделения +целесообразно выделить текст «Указание» в начале этого абзаца).

          -

          { } , - html-. - , - . +

          Команды выделения переменной { и } не влияют на ее вид в окне задачника, но +обеспечивают ее выделение курсивом в тексте html-страницы. +В индексах команды выделения переменной не учитываются, +а любые латинские буквы в них автоматически выделяются курсивом.

          -

          , - . - . - \I, \B, \S , - . +

          В односимвольных индексах нельзя указывать управляющие последовательности для вывода специальных символов, +поэтому при необходимости применения в индексах специальных символов следует использовать режим многосимвольных индексов. +Метки индексов не могут быть вложенными. +В индексах не допускается использование меток выделения \I, \B, \S и наоборот, +внутри выделенного текста не допускается указывать индексы.

          -

          . , - TaskText CommentText, , . - ( ), - , TaskText CommentText. +

          Выделенные фрагменты не могут содержать меток выделения другого вида. Режим индексов и выделения, заданный в +одной процедуре TaskText или CommentText, не переносится на текст, определяемый при последующих вызовах этих процедур. +Если в тексте отсутствуют команды завершения текущего режима (индексов или выделения), то режим автоматически завершается +при достижении конца текста, определяемого в текущей процедуре TaskText или CommentText.

          -

          r, l, c - (r — , -l — , c — ). - . -( \,). +

          В команде начала режима выравнивания по столбцам символы r, l, c определяют +способ выравнивания в каждом столбце текста (r — выравнивание по правому краю, +l — выравнивание по левому краю, c — выравнивание по центру). +Их количество должно быть равно числу столбцов. В каждом столбце должен быть хотя бы один непробельный символ +(для пустого столбца достаточно указать малый неразрывный пробел \,).

          -

          , , -( If26): +

          Ввиду сложности управляющих последовательностей, связанных с выравниванием по столбцам, приведем пример их использования +(пример взят из задания If26):

          -
          TaskText('  ~{x}   ' +
          -  ' ~{f},', 0, 1);
          -TaskText('  :', 0, 2);
          -TaskText('\[\Jrcrl&\,&\,&       \-{x},&  {x}~\l~0,',
          +
          TaskText('Для данного вещественного~{x} найти значение ' +
          +  'следующей функции~{f},', 0, 1);
          +TaskText('принимающей вещественные значения:', 0, 2);
          +TaskText('\[\Jrcrl&\,&\,&       \-{x},& если {x}~\l~0,',
             26, 3);
          -TaskText('&{f}({x})&~=~&{x}^2,&  0~<~{x}~<~2,', 26, 4);
          -TaskText('&\,&\,&        4,&  {x}~\g~2.\j\]', 26, 5);
          +TaskText('&{f}({x})&~=~&{x}^2,& если 0~<~{x}~<~2,', 26, 4);
          +TaskText('&\,&\,&        4,& если {x}~\g~2.\j\]', 26, 5);
           
          -

          : +

          В результате обработки данной формулировки задания в окне задачника будет выведен текст:

          -

          html- : +

          В html-описании этот же текст будет отформатирован следующим образом:

          -

          \| , -( ). - html- , , - ( ) . +

          Команду разрыва строки \| можно использовать как в обычном тексте, так и в режиме выделения с отступом или центрированием +(в режиме выравнивания по столбцам переход на новую строку выполняется автоматически). +Для более наглядного отображения в html-документе текста, выровненного по столбцам, данный текст рекомендуется +дополнительно центрировать (как в приведенном выше примере) или использовать для него режим выравнивания с отступом.

          -

          , - : , , - . - TaskText X - ( ), 26 — - , -. +

          Следует обратить внимание еще на одну особенность формулировок, содержащих +выравнивание по столбцам: строки с подобным выравниванием, как правило, +не нужно центрировать в окне задачника. В приведенном примере в трех последних +вызовах процедуры TaskText в качестве параметра X указывается не +нулевое значение (означающее центрирование по горизонтали), а число 26 — +значение позиции по горизонтали, начиная с которой требуется вывести указанную +строку.

          -

          - TaskText, 4.11. - , - , (#13 #10). - - , , -, , -. , TaskText - . - - , , - \, - . ( - ) . - , - TaskText ( - , ; - ): +

          Указанное обстоятельство может затруднить использование для подобных формулировок +нового варианта процедуры TaskText, появившегося в конструкторе версии 4.11. +В этом варианте указывается единственный строковый параметр, содержащий +все строки формулировки, разделенные символами разрыва строки (#13 или #10). +При разборе этого параметра из каждой строки формулировки удаляются начальные +и конечные пробелы, причем строки формулировки, оказавшиеся в результате +пустыми, игнорируются, а все непустые строки выводятся в окне задачника в режиме +центрирования. Тем не менее, и этот вариант процедуры TaskText позволяет +обеспечить особое выравнивание требуемых строк в окне задачника. Для этого +надо добавить некоторое количество вспомогательных начальных или конечных +пробелов к строке, требующей специального выравнивания, причем первый начальный +или последний конечный пробел надо экранировать символом \, чтобы не допустить +его автоматического удаления. Прочие пробелы (следующие за начальным пробелом +или предшествующие конечному пробелу) экранировать необязательно. +Приведем пример определения формулировки, в котором +используется новый вариант процедуры TaskText (следует обратить внимание +на конечные пробелы, указанные в последних трех строках; в остальном +текст формулировки не отличается от приведенного выше):

          -
          TaskText('  ~{x}    ~{f},'#13 +
          -'  :'#13 +
          -'\[\Jrcrl&\,&\,&       \-{x},&  {x}~\l~0,     \ '#13 +
          -'&{f}({x})&~=~&{x}^2,&  0~<~{x}~<~2, \ '#13 +
          -'&\,&\,&        4,&  {x}~\g~2.\j\]     \ ');
          +
          TaskText('Для данного вещественного~{x} найти значение следующей функции~{f},'#13 +
          +'принимающей вещественные значения:'#13 +
          +'\[\Jrcrl&\,&\,&       \-{x},& если {x}~\l~0,     \ '#13 +
          +'&{f}({x})&~=~&{x}^2,& если 0~<~{x}~<~2, \ '#13 +
          +'&\,&\,&        4,& если {x}~\g~2.\j\]     \ ');
           
          -

          \P . - , , ( , ). - , - html- . \P html- , - . +

          Управляющая последовательность \P предназначена для разделения абзацев. +В тексте, отображаемом в окне задачника, данная команда игнорируется (подобно прочим командам, связанным с разделением на абзацы). +Для нее не предусмотрено парной завершающей команды, поскольку необходимые теги при переходе к новому абзацу +добавляются в текст html-страницы автоматически. Пробелы после команды \P при генерации html-страницы игнорируются, +однако они учитываются при отображении текста в окне задачника.

          -

          -

          «» \h \H, - , - ANSI Latin-1 ( \h) - Windows- Symbol ( \H). - , - ; A, B, C, D, E, F . - , - «?» ( ). +

          Генерация специальных символов

          +

          Используя две «универсальные» управляющие последовательности \h и \H, +можно включать в текст задания или преамбулы специальные символы, +входящие во вторую половину кодовой таблицы для западноевропейских языков ANSI Latin-1 (команда \h) или +содержащиеся в Windows-шрифте Symbol (команда \H). +После имени каждой из этих команд следует указать двузначное шестнадцатеричное число, определяющее +код требуемого символа; при этом шестнадцатеричные цифры A, B, C, D, E, F можно указывать в любом регистре. +Если двухсимвольный текст после команд нельзя преобразовать в шестнадцатеричное число или число не является допустимым, +то команды возвращают символ «?» (знак вопроса).

          -

          \h ( Latin-1) 128–255, - , , 160 (A0) «» 173 (AD). - Ansi Latin-1 128–159 Unicode ; - html- Unicode. +

          В случае команды \h (символы таблицы Latin-1) допустимыми считаются числа из диапазона 128–255, за исключением +кодов неотображаемых символов, например, кода неразрывного пробела 160 (A0) или «мягкого» переноса 173 (AD). +Символы таблицы Ansi Latin-1 с кодами 128–159 имеют в кодировке Unicode другие значения кодов; +при генерации html-описаний для этих символов используются их коды в таблице Unicode.

          -

          \H , Windows- Symbol. - , ASCII ANSI Latin-1 (, ) - (, , - : A, B, E, H, X . .). , 230–239 243–254, - . +

          С помощью команды \H можно получить только часть символов, определенных в Windows-шрифте Symbol. +Исключены символы, уже присутствующие в таблицах ASCII и ANSI Latin-1 (например, цифры и знаки препинания) +или имеющие идентичное начертание с символами из этих таблиц (например, заглавные греческие буквы, совпадающие по +начертанию с латинскими: A, B, E, H, X и т. д.). Кроме того, исключены символы с кодами 230–239 и 243–254, +представляющие собой фрагменты больших скобок.

          -

          , - - (Microsoft Internet Explorer, -Mozilla Firefox Opera) -. - Internet Explorer Firefox Windows, - Symbol, Opera . , Opera Firefox - Unicode-, - Windows-, Internet Explorer, . - \H html- , - Internet Explorer ( Mozilla Firefox): - Windows- Symbol. Opera ( , Windows) - . +

          Следует заметить, что для части математических символов нельзя обеспечить их +правильное отображение в каждом из трех наиболее популярных веб-браузеров (Microsoft Internet Explorer, +Mozilla Firefox и Opera) без использования средств веб-программирования. +В браузерах Internet Explorer и Firefox можно подключать шрифты Windows, в том числе +шрифт Symbol, однако в Opera это сделать нельзя. С другой стороны, в Opera и Firefox для отображения +всех стандартных математических символов достаточно указать их код в Unicode-кодировке, однако в +стандартных Windows-шрифтах, используемых браузером Internet Explorer, часть символов с требуемыми кодами отсутствует. +При реализации команды \H для вывода подобных символов в html-документе был выбран вариант, +обеспечивающий их правильное отображение в браузере Internet Explorer (и Mozilla Firefox): +для этого используется Windows-шрифт Symbol. Однако в браузере Opera (и других браузерах, не поддерживающих шрифты Windows) +данные символы будут отображаться неправильно.

          -

          . Windows- Mozilla Firefox -« - ». - «», - : « | ...», - «» - «» « » -«...». +

          Примечание. Для возможности использования Windows-шрифтов в браузере Mozilla Firefox следует установить режим +«Разрешить веб-сайтам использовать свои шрифты вместо установленных». +Соответствующий флажок находится в окне «Шрифты», которое можно отобразить с помощью следующей +последовательности действий: выполнить команду меню «Инструменты | Настройки...», в +появившемся окне «Настройки» +перейти на вкладку «Содержимое» и в разделе «Шрифты и цвета» нажать кнопку +«Дополнительно...».

          -

          - (. , «»). - . +

          С некоторыми часто используемыми специальными символами связаны особые управляющие +последовательности (см. таблицу управляющих последовательностей, раздел «Символы»). +Все подобные символы правильно отображаются во всех перечисленных выше браузерах.

          -

          (∩, 8745) - Windows-, , -(, , . .), . - , , html- , - ( \Hc7) - Symbol. +

          Хотя символ пересечения (∩, код 8745) +имеется в стандартных Windows-шрифтах, прочие символы, связанные с множествами +(объединение, вложение, принадлежность и т. д.), в этих шрифтах отсутствуют. +Для того чтобы все обозначения, связанные с множествами, выглядели в html-документе единообразно, +для отображения символа пересечения (команда \Hc7) +используется соответствующий символ из шрифта Symbol.

          -

          , \h \H. - , \h, — , \H. - , , Opera, - . +

          Ниже приводятся таблицы всех символов, которые можно получить с помощью универсальных команд \h и \H. +Первая таблица содержит символы, генерируемые командой \h, а вторая — символы, генерируемые командой \H. +Команды из второй таблицы, связанные с теми символами, которые будут неверно отображаться в браузере Opera, +выделены полужирным шрифтом.

          -

          1. , \h +

          Таблица 1. Символы, генерируемые командой \h

          @@ -1506,7 +1506,7 @@ Mozilla Firefox

          -

          2. , \H +

          Таблица 2. Символы, генерируемые командой \H

          diff --git a/PABCNetHelp/ForEducation/MakeModules/tmaker_main.html b/PABCNetHelp/ForEducation/MakeModules/tmaker_main.html index c154529a9..91edd215d 100644 --- a/PABCNetHelp/ForEducation/MakeModules/tmaker_main.html +++ b/PABCNetHelp/ForEducation/MakeModules/tmaker_main.html @@ -10,155 +10,155 @@ -

          PT4TaskMakerNET:

          +

          Модуль PT4TaskMakerNET: общее описание


          -

          +

          Назначение и состав конструктора учебных заданий

          -

          PT4TaskMaker - Programming Taskbook. +

          Конструктор учебных заданий PT4TaskMaker позволяет разрабатывать +новые группы заданий для электронного задачника Programming Taskbook.

          - 4.11, , - , - Pascal, C++ C#, - Pascal PascalABC.NET. - PascalABC.NET PT4TaskMakerNET. +Начиная с версии 4.11, новые группы заданий, доступные +для всех поддерживаемых задачником сред, можно +разрабатывать не только на языке Pascal, но и на языках C++ и C#, причем +конструктор для языка Pascal можно использовать и в среде PascalABC.NET. +Конструктор для среды PascalABC.NET реализован в виде модуля PT4TaskMakerNET.

          - -(dll-). Dll- - , Lib -. -, - - , - . , - PT4Demo PT4Load. - dll- - , , - PascalABC.NET; dll- - PT4\Lib PascalABC.NET . +Каждая группа учебных заданий оформляется в виде отдельной динамической библиотеки +(dll-файла). Dll-файлы с новыми группами могут находиться либо +в рабочем каталоге учащегося, либо в подкаталоге Lib системного каталога +задачника. Подключение новых групп происходит автоматически при инициализации +задания, поэтому вид проекта-заготовки при работе с новыми группами +не отличается от стандартного вида проекта, ориентированного на +базовые группы заданий. Кроме того, новые группы автоматически +добавляются в список доступных групп в программных модулях PT4Demo и PT4Load. +Созданные в виде dll-файлов новые группы заданий могут использоваться +не только в любых средах программирования, поддерживаемых универсальным вариантом задачника, +но и в среде PascalABC.NET; для этого достаточно разместить dll-файл в +подкаталоге PT4\Lib системного каталога PascalABC.NET или в рабочем каталоге учащегося.

          -

          -

          , , - , . +

          Обзор элементов конструктора учебных заданий

          +

          Конструктор учебных заданий представляет собой набор констант, функций и процедур, +предназначенных для определения каждого из входящих в группу заданий, а также для настройки свойств группы в целом.

          -

          , PT4TaskMaker: +

          Ниже перечислены элементы, входящие в конструктор PT4TaskMaker:

            -
          • TInitTaskProc; - TInitTaskProc, - ; -
          • CreateGroup, ; -
          • , -, (, , -, ); , - ; -
          • UseTask, - ; ; -
          • , , ; -
          • , -( , -— —, , , - ); -
          • , , ; -
          • , ; -
          • , -— ; -
          • MPI-. +
          • процедурный тип TInitTaskProc; +в библиотеке с группой заданий должна быть определена основная процедура группы типа TInitTaskProc, +позволяющая генерировать задание с требуемым номером; +
          • процедура CreateGroup, определяющая общие характеристики группы заданий; +
          • процедуры и константы, используемые для создания нового задания и добавления в него +формулировки, а также исходных и контрольных данных базовых типов (логического, целочисленного, +вещественного, символьного строкового); обычно каждое задание оформляется в виде отдельной процедуры, которая вызывается +из основной процедуры группы; +
          • процедура UseTask, позволяющая импортировать в создаваемую +группу задания из других групп; эта процедура обычно вызывается в основной процедуре группы; +
          • процедуры, обеспечивающие добавление комментариев, оформляемых в виде преамбулы к группе и ее подгруппам; +
          • функции и константы, позволяющие определить текущее состояние задачника +(используемый язык программирования, текущую локаль +— русскую или английскую —, текущую версию задачника, а также номер текущего тестового испытания программы, +выполняющей задание); +
          • функции, предоставляющие разработчику заданий образцы слов, предложений и многострочных текстов; +
          • процедуры, позволяющие включать в задание файловые данные; +
          • процедуры, позволяющие включать в задание указатели и динамические структуры данных +— линейные списки и деревья; +
          • процедуры для разработки заданий по параллельному MPI-программированию.
          -

          +

          Библиотечные и сводные группы

          -

          , , , -, , . - 9 , . - , , ( ), - ; - (, , ).

          +

          При разработке новых заданий целесообразно объединять их в группы с именами, содержащими, кроме названия темы, дополнительные +сведения, например, версию созданной группы и данные об авторе. Однако допустимые имена групп могут содержать +не более 9 символов, что является недостаточным для указания дополнительных сведений. +С другой стороны, группы, содержащие только новые задания (библиотечные группы), вряд ли будут использоваться +непосредственно в учебном процессе; более целесообразной будет компоновка этих новых заданий с заданиями из соответствующей базовой группы +задачника (и, возможно, с заданиями из других библиотечных групп).

          -

          , ( , ) - 9 ( 25). +

          Поэтому при разработке группы, содержащей исключительно новые задания (библиотечной группы, или библиотеки заданий) +разрешено указывать имя длины более 9 символов (но не более 25).

          -

          . - Task, - (, « », - , ). - , PT4Load, - PT4Demo ( - ). +

          Библиотечные группы не предназначены для непосредственного использования в учебном процессе. Задания из этих групп +можно запускать с помощью процедуры Task, +однако они будут отображаться только в демонстрационном режиме (точнее, в режиме «просмотра библиотеки заданий», +о чем будет свидетельствовать соответствующий текст, указываемый в окне задачника вместо сведений об учащемся). +Библиотечные группы не включаются в список групп, отображаемый в модуле PT4Load, однако доступны +для просмотра с помощью модуля PT4Demo (в этом модуле библиотечные группы указываются в конце +списка групп).

          -

          , , - , . - -( ), , - . - 9 . +

          Для применения на занятиях удобно использовать сводные группы, не содержащие реализации новых заданий, +а лишь импортирующие наборы заданий из базовых и дополнительных библиотечных групп и компонующие их в порядке, который требуется преподавателю. +При импортировании задания из другой группы у него изменяется название и ключ +(которые берутся из характеристик сводной группы), однако сохраняются такие характеристики импортируемой группы, как +заголовки подгрупп и сведения об авторе. +Имена сводных групп должны содержать не более 9 символов.

          -

          +

          Структура проекта с описанием группы заданий

          -

          , (dll-), - (. «»). +

          В данном разделе описываются правила, которым должен удовлетворять проект (dll-библиотека), +содержащий описание новой группы заданий (см. также раздел «Примеры»).

          -

          , dll-, . - PT4< >< >, - < > , _ru _en. -, TMDemoPas PT4TMDemoPas.dll, PT4TMDemoPas_ru.dll - PT4TMDemoPas_en.dll. - , (ru — , -en — ). , , - ( ). - : - ; , - ; , - ( ) Lib . +

          Каждый проект, реализуемый в виде dll-библиотеки, должен содержать определение единственной группы заданий. +Имя библиотеки с группой заданий должно иметь вид PT4<имя группы><маркер локали>, +где <маркер локали> является либо пустой строкой, либо имеет вид _ru или _en. +Например, группа TMDemoPas может быть реализована в виде библиотек PT4TMDemoPas.dll, PT4TMDemoPas_ru.dll +и PT4TMDemoPas_en.dll. Библиотеки с явно указанным маркером локали используются только в +варианте задачника, соответствующем данной локали (ru — в русском варианте задачника, +en — в английском). Библиотеки, в которых не указан маркер локали, используются в любом +варианте задачника (если они не перекрываются библиотекой с явно указанной локалью). +Порядок поиска библиотек для требуемой группы следующий: вначале просматривается рабочий каталог учащегося +и в нем ищется библиотека с данным именем и явно указанной локалью; если она не найдена, +то ищется библиотека с данным именем без маркера локали; если она не найдена, то +поиск библиотек (в этом же порядке) выполняется в каталоге Lib системного каталога задачника.

          -

          . - , - Pascal PascalABC.NET: +

          Проект с описанием новой группы должен иметь определенную структуру. +Приведем описание структуры проекта, который реализуется +на языке Pascal в среде PascalABC.NET:

          library PT4MakerDemo;
           
           uses PT4TaskMakerNET;
           
          -// ,   
          +// процедуры, реализующие конкретные задания
           ...
           
           procedure InitTask(num: integer);
           begin
          -  //       ,
          -  //    ;   
          -  //  num;   , 
          -  //  ,    case
          +  // в данной процедуре выполняются вызовы вспомогательных процедур,
          +  // реализующих все задания группы; номер задания определяется
          +  // параметром num; для определения процедуры, соответствующей
          +  // требуемому номеру, обычно используется оператор case
             ...
           end;
           
           procedure inittaskgroup;
           begin
          -  //  ,     
          -  //  CreateGroup    , 
          -  //    ()     .
          -  //        
          +  // вспомогательная процедура, в которой выполняется вызов стартовой
          +  // процедуры CreateGroup и могут вызываться процедуры, связанные
          +  // с добавлением комментариев (преамбул) для группы и ее подгрупп.
          +  // Все буквы в ее имени должны быть строчными
           
          -  CreateGroup('TMDemoAbc', '   (   PascalABC.NET)',
          -    '. . , 2013', 'qwqfsdf13dfttd', 8, InitTask);
          +  CreateGroup('TMDemoAbc', 'Примеры различных задач (конструктор для языка PascalABC.NET)',
          +    'М. Э. Абрамян, 2013', 'qwqfsdf13dfttd', 8, InitTask);
             ...
           end;
           
           procedure activate(S: string);
           begin
          -  //  ,    
          -  //  .        
          +  // вспомогательная процедура, используемая при подключении библиотеки
          +  // к задачнику. Все буквы в ее имени должны быть строчными
           
             ActivateNET(S);
           end;
          @@ -167,63 +167,63 @@ begin
           end.
           
          -

          , - , - - . -, , Visual Basic 1C - , Pascal C++ -, - .NET, Python Java. . , , «». +

          При определении новой группы заданий можно учитывать текущий язык программирования, +установленный для задачника, и в зависимости от этого языка по-разному инициализировать +некоторые задания группы. Эта возможность является особенно полезной при реализации +заданий, связанных с обработкой динамических структур данных, поскольку в языках Visual Basic и 1C +подобные задания должны быть недоступны, а в языках Pascal и C++ они должны оформляться по-другому, нежели в +языках платформы .NET, Python и Java. См. также пункт, посвященный динамическим структурам данных, в разделе «Примеры».

          -

          . - , html- (html- - , - Task '< >#', , 'TMDemoAbc#', - PascalABC.NET. - , - , ( ). , - , , - -( , , - , . .). - , -html- . -. , - , «». +

          Разрабатываемые группы заданий желательно снабжать дополнительными комментариями. Эти комментарии не отображаются +в окне задачника, однако включаются в html-описание группы в виде преамбулы группы (html-описание +группы можно создать, либо вызвав в программе +процедуру Task с параметром вида '<имя группы>#', например, 'TMDemoAbc#', либо воспользовавшись +кнопкой в окне среды PascalABC.NET. +Кроме того, большие группы заданий целесообразно разделять на +несколько подгрупп, в каждую из которых также можно добавлять комментарии (преамбулы подгрупп). В преамбулах, как +и в формулировках заданий, можно использовать специальные управляющие последовательности, +которые позволяют отформатировать текст требуемым образом +(в частности, обеспечивают выделение переменных, позволяют +использовать в тексте верхние и нижние индексы, специальные символы и т. д.). Форматирование +используется и при отображении формулировки задания в окне задачника, и при генерации +html-страницы с описанием группы заданий. +См. также пункт, +посвященный добавлению комментариев, в разделе «Примеры».

          -

          PascalABC.NET

          -

          PascalABC.NET - pas- , - , , - « ». - PT4TaskMakerNET; - Lib PascalABC.NET. +

          Настройка проектов для языка PascalABC.NET и особенности их отладки

          +

          Для разработки новой группы заданий в среде PascalABC.NET +достаточно подготовить pas-файл с именем, совпадающим с именем +создаваемой библиотеки, и структурой, описанной в +пункте «Структура проекта с описанием группы заданий». +Для данного файла должен быть доступен модуль PT4TaskMakerNET; он может размещаться +в этом же каталоге или в подкаталоге Lib системного каталога среды PascalABC.NET.

          -

          [F9] . +

          При нажатии клавиши [F9] будет создана динамическая библиотека с новой группой заданий.

          -

          PascalABC.NET - , - , - PT4Load - . , - , . , - TMDemoAbc : +

          Поскольку в среде PascalABC.NET +не предусмотрены средства для определения главного приложения при разработке библиотек, +для тестирования новой группы заданий необходимо использовать еще одно приложение, заготовку +для которого можно создать с помощью программного модуля PT4Load +уже после первой успешной компиляции динамической библиотеки. Впрочем, заготовка является +настолько простой, что ее можно создать и непосредственно. Например, для тестирования +группы с именем TMDemoAbc достаточно воспользоваться следующей программой:

          uses PT4;
           begin
             Task('TMDemoAbc1?');
           end.
           
          -

          -TMDemoAbc , - ( - «?», ). - - Task. , - «?» : Task('TMDemoAbc?'). - , . +

          При запуске этой программы на экран будет выведено окно задачника для группы +TMDemoAbc в демонстрационном режиме, причем в качестве текущего будет выбрано +первое задание данной группы (демонстрационный режим устанавливается благодаря +символу «?», указанному после имени задания). Для отображения в окне задачника +сразу после запуска программы другого существующего задания этой группы достаточно +указать его номер в параметре процедуры Task. Можно также удалить номер, указав +символ «?» сразу после имени группы заданий: Task('TMDemoAbc?'). +В этом случае при запуске программы будет отображаться последнее задание, входящее в группу.

          diff --git a/PABCNetHelp/ForEducation/MakeModules/tmaker_proc1.html b/PABCNetHelp/ForEducation/MakeModules/tmaker_proc1.html index 3231e4337..ea3cb0d66 100644 --- a/PABCNetHelp/ForEducation/MakeModules/tmaker_proc1.html +++ b/PABCNetHelp/ForEducation/MakeModules/tmaker_proc1.html @@ -10,158 +10,158 @@ -

          PT4TaskMakerNET:

          +

          Модуль PT4TaskMakerNET: основные компоненты


          -

          , - . +

          Если процедура имеет необязательные параметры, то +в списке параметров они заключаются в квадратные скобки.

          -

          -

          : +

          Определение общих характеристик группы заданий

          +

          При создании новой группы заданий требуется определить следующие характеристики этой группы:

            -
          • (GroupName) — , 1 25 -— , -( 9 , , - ); (Begin, Integer . .); -, , ; -
          • (GroupDescription) — ; - html- ; -
          • (GroupAuthor) — - (, , , e-mail . .; ); -
          • (GroupKey) — , - results.dat results.abc , ; -
          • (TaskCount) — 1 999, ; -
          • (InitTaskProc) — , - ( ). +
          • имя группы (GroupName) — текстовая строка, содержащая от 1 до 25 символов +— цифр и латинских букв, причем последний символ не может быть цифрой +(если имя группы содержит более 9 символов, то она считается особой библиотечной группой, +работа с которой отличается от работы с обычной группой); запрещается использовать имена стандартных групп задачника (Begin, Integer и т. д.); +имена, различающиеся только регистром букв, считаются совпадающими; +
          • описание группы (GroupDescription) — непустая текстовая строка с кратким описанием данной группы; при генерации +полного описания группы в виде html-страницы данная строка указывается в качестве заголовка этого описания; +
          • сведения об авторе (GroupAuthor) — +текстовая строка с информацией о разработчике данной группы (фамилия, инициалы, год разработки, e-mail и т. п.; строка может быть пустой); +
          • ключ группы (GroupKey) — непустая текстовая строка с произвольным набором символов, позволяющая в дальнейшем +идентифицировать в файле результатов results.dat и results.abc те выполненные задания, которые относятся к данной группе; +
          • количество заданий в группе (TaskCount) — целое число в диапазоне от 1 до 999, определяющее количество заданий в группе; +
          • основная процедура группы заданий (InitTaskProc) — процедура с одним целочисленным параметром, +обеспечивающая инициализацию всех заданий данной группы (параметр данной процедуры определяет номер задания в пределах группы).
          -

          . -, , , . -, , , , - , «» - . , , -. , - , . , - , , -« », Teacher Pack. +

          Из перечисленных характеристик в дополнительном комментарии нуждается ключ группы. Если не использовать подобную +характеристику, то становится невозможной идентификация группы, к которой относятся задания, выполненные учащимся. +Действительно, имя задания, сохраненное в файле результатов, не позволяет однозначно его идентифицировать, поскольку +ничто не мешает разработать другую группу с тем же именем и совершенно другими заданиями, после чего «подменить» +ею исходную группу. Проблему решает использование ключа группы, который сложно подделать, так как он известен только разработчику +группы. При успешном выполнении задания в файл результатов дополнительно записывается идентификатор группы, вычисляемый +на основе ее ключа и позволяющий однозначно определить группу, к которой относится выполненное задание. Поскольку информация, связанная +с идентификаторами групп, представляет интерес только для преподавателя, ознакомиться с ней можно только с помощью программы +«Контрольный центр преподавателя», входящей в комплекс Teacher Pack.

          -

          . PT4Demo PT4Load - ( ). - - ( , , , «»), - - «^» (). - «^» -« , ». +

          Примечание. При выводе краткого описания группы в программных модулях PT4Demo и PT4Load первый символ этого описания +преобразуется к нижнему регистру (поскольку текст описания располагается в этих модулях после двоеточия). +Если понижать регистр первого символа +не следует (в случае, если этот символ является началом фамилии или некоторой аббревиатуры, например, «ЕГЭ»), +то в начале краткого описания группы надо указать дополнительный символ-метку «^» (шапочка). +Пример использования символа «^» приводится в разделе +«Разработка групп заданий, связанных с ЕГЭ по информатике».

          -

          CreateGroup, - : +

          Для определения характеристик новой группы необходимо вызвать процедуру CreateGroup, +указав эти характеристики в качестве параметров:

          procedure CreateGroup(GroupName, GroupDescription, GroupAuthor,
             GroupKey: string; TaskCount: integer; InitTaskProc: TInitTaskProc);
           
          -

          TInitTaskProc : +

          Тип TInitTaskProc определяется следующим образом:

          type TInitTaskProc = procedure(n: integer);
           
          -

          CreateGroup inittaskgroup, , . +

          Процедуру CreateGroup необходимо вызывать в процедуре inittaskgroup, которая должна экспортироваться библиотекой, содержащей данную группу.

          -

          CreateGroup - . , , , - . : +

          Процедура CreateGroup контролирует правильность переданных ей параметров и в случае ошибки выводит на экран информационное окно +с ее описанием. В подобной ситуации все последующие действия, связанные с определением данной группы, игнорируются, и группа +не включается в список доступных для использования групп заданий. Перечислим некоторые из возможных ошибок:

          -
          • inittaskgroup ( , , ); -
          • dll-, (, dll- -PT4< > PT4< >< >); - pcu- ; -
          • Programming Taskbook ; -
          • ( , ); -
          • ; -
          • ; -
          • 1–999; -
          • InitTaskProc . +
            • в процедуре inittaskgroup определяется более одной группы заданий (в этом случае определения всех групп, кроме первой, игнорируются); +
            • имя группы не соответствует имени dll-файла, в котором данная группа определяется (напомним, что имя dll-файла должно иметь вид +PT4<имя группы> или PT4<имя группы><маркер локали>); +при реализации группы в виде pcu-файла данное ограничение отсутствует; +
            • к задачнику Programming Taskbook уже подключена группа с указанным именем; +
            • имя группы не является допустимым (в частности, совпадает с именем одной из базовых групп задачника); +
            • не указано краткое описание группы; +
            • не указан ключ группы; +
            • количество заданий не принадлежит диапазону 1–999; +
            • процедурная переменная InitTaskProc содержит нулевую ссылку.
            -

            +

            Базовые константы и процедуры для создания новых заданий


            const
               xCenter = 0;
               xLeft = 100;
               xRight = 200;
             
            -

            , - : xCenter - , , -, xLeft xRight - . - - X Data Result, TaskText. +

            Эти константы, отвечают за выравнивание +данных по горизонтали: константа xCenter +центрирует текст, связанный с элементом данных, относительно всей экранной +строки, константы xLeft и xRight центрируют текст в +пределах левой и правой половины экранной строки соответственно. +Используются в качестве +параметра X в процедурах групп Data и Result, а также в процедуре TaskText.


            procedure CreateTask([SubgroupName: string]);
             
            -

            - ; SubgroupName , - ( , -; - ). - , - . - ; , - ( GroupDescription CreateGroup). - .

            -

            4.9 CreateTask -, MPI-. +

            Данная процедура должна быть вызвана первой +при инициализации нового задания; в качестве необязательного параметра SubgroupName указывается заголовок подгруппы, +в которую включается задание (задания целесообразно разбивать на подгруппы, если их количество в группе является достаточно +большим; в случае деления группы на подгруппы каждое задание рекомендуется связывать с какой-либо подгруппой). +Если параметр является пустой строкой или отсутствует, то задание не связывается с какой-либо подгруппой. +В окне задачника заголовок подгруппы выводится над именем задания; если подгруппа для данного задания не указана, то +выводится краткое описание всей группы (определенное в параметре GroupDescription процедуры CreateGroup). +При выводе краткого описания группы или заголовка подгруппы в окне задачника его текст преобразуется к верхнему регистру.

            +

            В версии 4.9 конструктора учебных заданий к первоначальным двум вариантам процедуры CreateTask были добавлены еще два +варианта, предназначенные для инициализации задания по параллельному MPI-программированию.


            procedure TaskText(S: string[; X, Y: integer]);
             
            -

            S, - Y ( 1 5) -, X. 1; X , - ( ) 78 . - X xCenter, xLeft xRight; , - X 0, . - ( , ); X - . - ; 1 , - 3, 2 — 2 4, 3 — 2, 3 4, -4 — 2 5 ( ). - , - html- . +

            Данная процедура добавляет к формулировке задания строку S, +которая располагается в строке Y (от 1 до 5) раздела формулировки +задания, начиная с позиции X. Позиции нумеруются от 1; при указании параметра X следует учитывать, что +ширина раздела формулировок (как и разделов исходных и результирующих данных) равна 78 символам. +Кроме явного указания значения позиции X можно использовать специальные константы xCenter, xLeft и xRight; в частности, +если параметр X равен 0, то строка центрируется. Рекомендуется всегда центрировать строки +в формулировках заданий (как это делается в базовых группах, входящих в задачник); явное указание позиции X следует использовать лишь +при выводе многострочных формул и в других случаях специального выравнивания текста. +Все строки должны добавляться к формулировке последовательно; при этом если формулировка содержит 1 строку, то ее следует располагать +на экранной строке с номером 3, если 2 строки — на экранных строках 2 и 4, если 3 строки — на экранных строках 2, 3 и 4, если +4 строки — на экранных строках с номерами от 2 до 5 (именно так оформляются задания в базовых группах задачника). +Нарушение порядка добавления строк не проявится при отображении формулировки в окне задачника, однако приведет к неверному выводу формулировки +в html-описании группы.

            -

            , , - , ( - , ). - , , , Y - 0. 200.

            -

            S -. +

            Кроме пяти строк с основным текстом формулировки, который отображается на экране при выводе задания, +можно указывать дополнительные строки, отображаемые на экране при прокрутке текста задания (связанные с прокруткой кнопки +отображаются в окне задачника справа от раздела формулировок, если в формулировке текущего задания имеются дополнительные строки). +Все дополнительные строки, как и основные, должны добавляться к формулировке последовательно, причем параметр Y для таких строк +надо положить равным 0. Максимальное количество дополнительных строк равно 200.

            +

            В строке S можно использовать управляющие +последовательности.

            -

            S , « - ». , S -( , ). +

            Если при выводе строки S часть ее не умещается на экранной строке, то выводится сообщение об ошибке «Ошибочное позиционирование +по горизонтали». Если ошибка произошла при выводе основной строки, то лишняя часть строки S отображается на следующей строке +(или на первой строке, если ошибочной является пятая строка в разделе формулировок).

            -

            TaskText html- . - , , , -, ( - ). +

            Определенный с помощью процедур TaskText текст формулировки задания используется также при формировании html-описания группы. +В этом случае деление на строки, указанное для экранного вывода, игнорируется, однако учитываются дополнительные управляющие +последовательности, позволяющие разбивать текст на абзацы с различным способом выравнивания (на отображение текста в окне задачника +эти дополнительные последовательности не влияют).

            -

            , . +

            Если при определении задания не указана его формулировка, то выводится сообщение об ошибке.

            -

            TaskText S 4.11 . - S , - #13, #10 #13#10. - ; - , - . ; - , ( -, 3, . .). -- , -; , ( ) - «\» ( ). +

            Вариант процедуры TaskText с единственным параметром S добавлен в версию 4.11 конструктора. +В этом варианте строка S должна содержать весь текст формулировки, причем строки формулировки должны +разделяться символами #13, #10 или их комбинациями #13#10. Начальные и конечные +пробелы в каждой строке формулировки удаляются; если в результате какая-либо строка окажется пустой, +то она не учитывается. Все строки формулировки автоматически центрируются по горизонтали; их вертикальное +расположение определяется количеством строк и соответствует правилам, приведенным выше (если формулировка содержит одну +строку, то она располагается на экранной строке 3, и т. д.). Если требуется специальное выравнивание +какой-либо строки текста, то его можно добиться за счет добавления дополнительных пробелов в начало или конец +строки; чтобы эти пробелы не были удалены, первый начальный (или последний конечный) пробел должен быть экранирован +символом «\» (обратная косая черта).


            @@ -175,58 +175,58 @@ procedure DataC([Cmt: string;] C: char; X, Y: integer); procedure DataS([Cmt: string;] S: string; X, Y: integer); -

            Data -. - , - Cmt, - , X -Y ( 1; 78 ). - Y, 5, - . - TaskText, X -: 0 ( ), -100 ( ), -200 ( ). - xCenter, xLeft xRight.

            -

            W ( - ). , - W , - . - ( SetPrecision, ). +

            Процедуры группы Data добавляют к заданию элементы исходных +данных. +Добавленные элементы, вместе с необязательной строкой-комментарием Cmt, +отображаются в разделе исходных данных, начиная с позиции X строки +Y (позиции и строки нумеруются от 1; ширина экранной строки равна 78 позициям). +Если используются значения параметра Y, большие 5, то разделе +исходных данных будет доступна прокрутка. +Как и для процедуры TaskText, параметр X может принимать три особых +значения: 0 (центрирование по горизонтали относительно всей экранной строки), +100 (центрирование по горизонтали относительно левой половины экранной строки), +200 (центрирование по горизонтали относительно правой половины экранной строки). Эти значения можно также задавать +с помощью констант xCenter, xLeft и xRight.

            +

            Параметр W определяет ширину поля вывода для числовых данных (выравнивание +всегда производится по правому краю поля вывода). Если ширины поля вывода недостаточно, то +значение параметра W игнорируется, и для вывода элемента используется минимально необходимое число +экранных позиций. При определении ширины поля вывода для вещественного числа следует учитывать +размер отображаемой дробной части (который определяется процедурой SetPrecision, описываемой далее).

            -

            ; - , 3 , , - , 5 , - . - L + 2 , L — ( - ). -, . +

            Для нечисловых данных ширина поля вывода полагается равной фактической ширине данных; +в частности, для данных символьного типа отводятся 3 позиции, содержащие начальный апостроф, +собственно символ и конечный апостроф, а для логического типа отводятся 5 позиций, достаточных +для вывода названий обеих логических констант в любом используемом языке программирования. +Для строки отводятся L + 2 позиции, где L — длина строки (начальная и конечная позиции +используются для вывода апострофов). В зависимости от текущего языка программирования используются либо +одинарные, либо двойные апострофы.

            -

            Data, 200 ( -, , , DataN2 DataN3, ). - , - , . , - , , . - , : -( ), — . +

            Используя процедуры группы Data, в задание можно включить до 200 различных скалярных исходных данных (при этом следует +учитывать, что некоторые процедуры, например, DataN2 и DataN3, добавляют в набор исходных данных несколько элементов). +Наложение различных элементов в разделе исходных данных задачником не контролируется, поэтому при размещении данных +следует обращать особое внимание на то, чтобы последующие элементы не скрывали предыдущие. Кроме того, важен порядок +определения исходных данных, так как именно в этом порядке данные будут передаваться программе учащегося, выполняющей это задание. +Следует придерживаться стандартных правил, принятых в базовых группах задачника: данные должны перебираться по строкам +(в направлении сверху вниз), а в пределах каждой строки — слева направо.

            -

            Cmt, , - (, ). +

            В параметре Cmt, содержащем текст комментария к определяемому элементу исходных данных, можно использовать +управляющие последовательности (например, для отображения индексов).

            -

            ; . +

            В любом задании должен быть задан хотя бы один элемент исходных данных; в противном случае выводится сообщение об ошибке.

            -

            , Cmt , 4.11 . +

            Варианты данных процедур, в которых параметр Cmt отсутствует, добавлены в версию 4.11 конструктора.


            procedure DataComment(Cmt: string; X, Y: integer);
             
            -

            Cmt, - - . , - , 200. -X Y — , - Data. +

            Процедура позволяет добавлять в раздел исходных данных отдельный комментарий Cmt, +не связанный с каким-либо элементом исходных данных. Общее число отдельных комментариев, включаемых в разделы исходных и +результирующих данных, не должно превосходить 200. Смысл параметров +X и Y — тот же, что и для процедур +группы Data.


            @@ -240,154 +240,154 @@ X procedure ResultC([Cmt: string;] C: char; X, Y: integer); procedure ResultS([Cmt: string;] S: string; X, Y: integer); -

            - . Cmt - . - - « ». -X, Y W — , - Data. 200 .

            -

            , , - ( W ), W , - . , - , , «» , - , - «*» () . - , ( , - ). - , - ; 1–2 - , , . +

            Процедуры данной группы добавляют к заданию элементы результирующих данных +вместе с их контрольными значениями. Комментарии Cmt к +результирующим данным сразу отображаются в разделе результатов. +Контрольные +значения отображаются в разделе «Пример верного решения». Смысл параметров +X, Y и W — тот же, что и для процедур +группы Data. Задание может содержать до 200 скалярных элементов результирующих данных.

            +

            Как и в случае исходных данных, если элемент контрольных данных не умещается в поле, выделенном для его +отображения (шириной W позиций), то параметр W игнорируется, и для вывода используется минимально необходимое число +экранных позиций. Однако если элемент результирующих данных, переданный +в задачник программой, решающей задание, не «уложится» в размер, выделенный для соответствующего +элемента контрольных данных, то +в правой позиции поля вывода для этого элемента отобразится символ «*» (звездочка) красного цвета. +Подобная ситуация возможна как для чисел, так и для строк (если программа учащегося выведет число или строку, +размер которых больше требуемого). +Для того чтобы в этой ситуации увидеть полный текст всех подобных элементов результирующих данных, следует +переместить курсор мыши в раздел результатов в окне задачника; через 1–2 секунды +полный текст всех данных, размер которых превышает допустимый, появится во всплывающей подсказке.

            -

            Result , , , - , . , , - - : . +

            Порядок вызова процедур группы Result важен, так как он соответствует порядку, в котором результирующие данные, полученные +программой учащегося, должны передаваться задачнику для проверки их правильности. Поэтому, как и для исходных данных, +для набора результирующих данных должен соблюдаться стандартный +порядок их размещения: сверху вниз по строкам и слева направо в каждой строке.

            -

            Cmt, , - . +

            В параметре Cmt, содержащем текст комментария к определяемому элементу результирующих данных, можно использовать +управляющие последовательности.

            -

            , , , - , , . , , - , , , - (, - SetPrecision). +

            Проверка правильности результатов, полученных программой учащегося, выполняется путем сравнения текста, +изображающего эти результаты в окне задачника, с текстом, изображающим соответствующие контрольные данные. Это означает, в частности, +что вычислительная погрешность, возникающая при обработке вещественных чисел, не будет влиять на проверку правильности, +если при отображении этих чисел не используется слишком большое количество дробных знаков (напомним, что число +дробных знаков можно задать с помощью процедуры SetPrecision).

            -

            ; . +

            В любом задании должен быть задан хотя бы один элемент результирующих данных; в противном случае выводится сообщение об ошибке.

            -

            , Cmt , 4.11 . +

            Варианты данных процедур, в которых параметр Cmt отсутствует, добавлены в версию 4.11 конструктора.


            procedure ResultComment(Cmt: string; X, Y: integer);
             
            -

            Cmt, - - . , - - , 200. -X Y — , - Data. +

            Процедура позволяет добавлять в раздел результатов отдельный комментарий Cmt, +не связанный с каким-либо элементом результирующих данных. Общее число отдельных комментариев, +включаемых в разделы исходных и +результирующих данных, не должно превосходить 200. Смысл параметров +X и Y — тот же, что и для процедур +группы Data.


            procedure SetPrecision(N: integer);
             
            -

            N , - . - 2. 0, - , - , . , - SetPrecision, , - . - . +

            Процедура устанавливает количество N дробных знаков, +используемое в дальнейшем при выводе всех элементов данных вещественного типа. +По умолчанию количество дробных знаков равно 2. Если оно равно 0, то +вещественные данные отображаются в экспоненциальном формате, а количество дробных знаков определяется +шириной поля вывода, указанной для данного числа. Действие текущей настройки, +определенной процедурой SetPrecision, продолжается до очередного вызова этой процедуры, однако +не распространяется на другие учебные задания текущей группы. При отображении вещественных чисел +в качестве десятичного разделителя всегда используется точка.


            procedure SetRequiredDataCount(N: integer);
             
            -

            N - , - . - . N , - ; , - , - . +

            Процедура определяет минимально необходимое количество N +элементов исходных данных, требуемое для правильного решения задания при текущем +наборе исходных данных. По умолчанию это количество равно общему числу всех +указанных в задании исходных данных. Если параметр N имеет нулевое или отрицательное значение, то +выводится сообщение об ошибке; если значение параметра превышает общее число элементов исходных данных, то +сообщение об ошибке не выводится, а требуемое количество исходных данных полагается равным их +общему количеству.

            -

            , , Series10. - N True, , - False . , , - True . - - SetRequiredDataCount, , - , - ( - « »). +

            Примером задания, в котором необходимо использовать данную процедуру, может служить задание Series10. +В этом задании дается набор из N целых чисел и требуется вывести True, если данный набор содержит положительные числа, +и False в противном случае. Ясно, что если при считывании элементов набора будет обнаружено положительное число, то +можно сразу выводить значение True и завершать выполнение задания. Однако если +при подготовке задания не указать минимально необходимое +число исходных данных с помощью процедуры SetRequiredDataCount, то по умолчанию будет считаться, что для решения +необходимо прочесть все исходные данные, и приведенный выше +правильный вариант решения будет расценен как ошибочный (при этом будет выведено +сообщение «Введены не все требуемые исходные данные»).

            -

            SetRequiredDataCount - , - : . - , - . +

            Если заданное с помощью процедуры SetRequiredDataCount количество требуемых исходных данных +меньше их общего количества, +то программа учащегося не обязана считывать все исходные данные: достаточно прочесть только требуемые. +Однако если программа прочтет все данные и выведет правильный ответ, это также будет считаться +верным вариантом решения.

            -

            - - . -SetRequiredDataCount(N) N, - , - . +

            При выполнении заданий по параллельному программированию во +всех процессах параллельной программы должны быть введены все +связанные с ними исходные данные. Поэтому попытка вызова процедуры +SetRequiredDataCount(N) с параметром N, значение которого меньше +общего числа исходных данных, приведет в задании по параллельному +программированию к сообщению об ошибке.


            procedure SetTestCount(N: integer);
             
            -

            N -, , . - 5. - N 2 9; N . +

            Процедура определяет количество N успешных тестовых испытаний программы +учащегося, необходимое для того, чтобы задание было зачтено как выполненное. +По умолчанию количество тестовых испытаний полагается равным 5. +Значение N должно находиться в пределах от 2 до 9; при указании других вариантов параметра N выводится сообщение об ошибке.

            -

            ( ), - , , : -« . 2 ( 5)». - , - 0, ( ) . +

            После каждого успешного тестового испытания в окне задачника выводится сообщение (на зеленом фоне), в котором +указывается номер испытания и общее число тестов, необходимых для выполнения данного задания, например: +«Верное решение. Тест номер 2 (из 5)». +Если при очередном тестовом испытании программы ею будет получено ошибочное решение, то счетчик +успешных тестов будет сброшен в 0, и тестирование (после исправления обнаруженной ошибки) придется начинать заново.


            function CurrentTest: integer;
             
            -

            4.11 . - , - . - , 1. - , 0. +

            Данная функция добавлена в версию 4.11 конструктора учебных заданий. +Она возвращает порядковый номер текущего тестового запуска, +причем учитываются только успешные тестовые запуски. Если ранее успешных +запусков не было, то функция возвращает 1. Если задание уже выполнено или +было запущено в демонстрационном режиме, то функция возвращает 0.

            -

            , -CurrentTest, ( 4.10 ) - CurrentTest 0. +

            При попытке подключения новой группы заданий, содержащей вызов функции +CurrentTest, к задачнику более ранней версии (до 4.10 включительно) +функция CurrentTest всегда возвращает 0.

            -

            - ( , -). - ; , - ( 9) - . CurrentTest, - , . - «» - , -- ; -(, ), - . , - CurrentTest 0, - . +

            Использование данной функции позволяет гарантировать включение в тестовые +наборы специальных вариантов тестов (связанных с ситуациями, требующими особой +обработки). В предыдущих версиях конструктора эти варианты выбирались +только с применением датчика случайных чисел; это могло приводить к тому, что на +протяжении требуемой серии тестов (которая не может превышать 9) особые +варианты ни разу не генерировались. Используя функцию CurrentTest, +особые варианты можно явно связать с тестовым испытанием, имеющим определенный номер. +Наряду с подобными «фиксированными» испытаниями при формировании +задания следует предусматривать и испытания, при которых варианты тестов +по-прежнему выбираются случайным образом; это позволит избежать ситуации +(впрочем, маловероятной), при которой учащийся будет запускать разные программы +для тестовых испытаний с различными порядковыми номерами. Необходимо также учитывать, что в ряде ситуаций +функция CurrentTest возвращает особое значение 0, при котором также целесообразно +выбирать тестовые варианты случайным образом.

            -

            , -Array32, . -, , - - ( « », - ). - ( n — , -k — ): +

            В качестве примера приведем начальную часть процедуры, реализующей задание +Array32, в котором требуется найти номер первого локального минимума. +Очевидно, в данном задании следует предусмотреть особые варианты тестов, +в которых первым локальным минимумом является первый или последний элемент +исходного набора (а также «промежуточный вариант», в котором +первый локальный минимум расположен во внутренней части набора). Ранее это +обеспечивалось следующим образом (здесь n — размер исходного набора, +k — порядковый номер первого локального минимума):

            n := 5 + Random(6);
             case Random(4) of
            @@ -395,20 +395,20 @@ k — 
             1: k := n;
             2, 3: k := 2 + Random(n-2);
             end;
            -
            +…
             
            -

            , - Random(4) 0 1, - . ( ) , - 2 3; - « ». - , , - , , - . +

            При предусмотренных шести тестовых испытаниях вполне могло оказаться, что +функция Random(4) ни разу не примет значения 0 или 1, и тем самым один или оба +особых случая не будут протестированы. Возможна (хотя и менее вероятна) ситуация, +при которой в течение всех испытаний ни разу не будут получены значения 2 и 3; +тем самым не будет испытан «промежуточный вариант». В то же время +было бы желательно, чтобы ошибка алгоритма, связанная с неверной обработкой +одной из возможных ситуаций, была выявлена задачником автоматически, +до просмотра преподавателем текста программы.

            -

            case , - k - : +

            В новом варианте процедуры после первого оператора case был добавлен второй, +в котором для некоторых тестовых испытаний вариант для значения k задается +явным образом:

            n := RandomN(5, 10);
             case Random(4) of
            @@ -421,17 +421,17 @@ k — 
             3: k := RandomN(2, n-1);
             5: k := 1;
             end;
            -
            +…
             
            -

            , () , - , k - . +

            При этом для первого, четвертого и шестого (последнего) тестового испытания, +а также при демонстрационных запусках, значение k по-прежнему выбирается случайным образом.

            -

            , RandomN, - 4.11 . +

            Заметим, что в новом варианте была также использована функция RandomN, +добавленная в версию 4.11 конструктора.

            -

            CurrentTest - ( ) , - 4.11. +

            После включения функции CurrentTest в конструктор были соответствующим +образом модифицированы (без изменения формулировок) все группы заданий, +включенные в базовый вариант задачника версии 4.11.

            @@ -440,38 +440,38 @@ k —
            function RandomN(M, N: integer): integer;
             function RandomR(A, B: real): real;
             
            -

            , - . - , - CreateGroup. - , - . +

            Вспомогательные функции, которые могут использоваться при генерации +исходных данных с применением датчика случайных чисел. В явной инициализации +датчика нет необходимости, поскольку подобная инициализация +выполняется в процедуре CreateGroup. Указанные функции позволяют выполнять +единообразную генерацию данных при использовании любого языка, поддерживаемого +конструктором учебных заданий.

            -

            RandomN(M, N) , - M N–1 . - , M. +

            Функция RandomN(M, N) возвращает псевдослучайное целое число, лежащее +в диапазоне от M до N–1 включительно. Если указанный +диапазон пуст, то функция возвращает M.

            -

            RandomR(A, B) , - [AB). -, A. +

            Функция RandomR(A, B) возвращает псевдослучайное вещественное число, лежащее +на полуинтервале [AB). Если указанный полуинтервал +пуст, то функция возвращает A.

            -

            - Random Pascal. +

            При генерации заданий можно применять +и стандартную функцию Random языка Pascal.


            function Center(I, N, W, B: integer): integer;
             
            -

            , - N . - , I- - (I 1 N) , - W , - B . Center - X Data -Result ( , ). +

            Вспомогательная функция, которая позволяет размещать по центру экранной +строки набор из N элементов данных одинаковой ширины. Эта функция +возвращает горизонтальную координату, начиная с которой следует выводить I-й +элемент набора (I меняется от 1 до N) при условии, что +ширина каждого элемента равна W позициям, а между элементами надо +указывать B пробелов. Функция Center обычно используется +в качестве параметра X в процедурах групп Data и +Result при выводе однотипных наборов данных (в частности, элементов массива).

            -

            , - : +

            В качестве примера приведем фрагмент, обеспечивающий формирование и вывод в разделе исходных данных +массива вещественных чисел:

             n := RandomN(2, 10);
            @@ -482,151 +482,151 @@ DataN('N = ', n, 0, 2, 1);
               DataR(a[i], Center(i, n, 5, 1), 4, 5);
             end;
             
            -

            ( ) N , - 2 10 -( «N = »). ( ) -, Center - . -9 9, . . - , , — - -; , - , 5 ; - : Center DataR. - -1 ( , Center). +

            Вначале (во второй строке области исходных данных) выводится размер N массива, +определяемый с помощью датчика случайных чисел и принимающий значения в диапазоне от 2 до 10 +(он снабжается комментарием «N = »). Затем (в четвертой строке) выводятся сами элементы +массива, причем благодаря использованию функции Center весь список выравнивается относительно центра экранной строки +независимо от количества элементов. Целые части всех элементов лежат в диапазоне от -9 до 9, т. е. +представляются одной цифрой, одна позиция отводится под знак числа, еще одна — +под отображение десятичного разделителя-точки; наконец, по умолчанию +указываются два дробных знака, поэтому для каждого элемента следует выделить 5 экранных позиций; +это число указывается дважды: как второй параметр функции Center и как последний параметр процедуры DataR. +Промежуток между элементами полагается равным +1 экранной позиции (это последний, четвертый параметр функции Center).

            -

            - Center ( 4.11 , - ). +

            При использовании +функции Center строку комментария следует оставлять пустой (начиная с версии 4.11 конструктора, +в этом случае строку комментария можно просто не указывать).

            -

            -

            4.9 , - Data Result, DataComment ResultComment, - Y , 5. - Y - 5, - , - . - , - Y, - 5. , - . - ; - , . - . +

            Прокрутка разделов исходных данных и результатов

            +

            Начиная с версии 4.9 конструктора учебных заданий, +для процедур групп Data и Result, в том числе DataComment и ResultComment, +в качестве параметра Y разрешено указывать значение, превышающее 5. +Если значение параметра Y для некоторого +элемента раздела исходных данных превышает 5, то этот элемент +размещается в строке с указанным номером, а в разделе +исходных данных становится доступной прокрутка. Аналогичным +образом прокрутка будет доступна в разделе результатов, если хотя бы +один элемент этого раздела помещен в него процедурой с параметром Y, +превышающим 5. Если оба раздела допускают прокрутку, то она +выполняется независимо. Прокрутку в любом разделе можно выполнять с +помощью клавиатуры или мыши; в последнем случае следует использовать +полосы прокрутки, расположенные справа от прокручиваемого раздела. +Прокрутка может также выполняться с помощью колесика мыши.

            -

            , -«» ( - ). - - Y, - 5, , , - « - ». , - , - , , - « - ». +

            В задании запрещено использовать прокрутку раздела, если в нем уже имеется +«внешний» объект (файл или +динамическая структура). Если +делается попытка вызвать какую-либо процедуру с параметром Y, +большим 5, для раздела, уже содержащего внешний объект, то выводится +сообщение об ошибке «При наличии внешних объектов режим +прокрутки для всего раздела недоступен». Если же в разделе, +уже имеющем элементы данных или комментарии, размещенные в +неотображаемых строках, делается попытка разместить внешний объект, +то выводится сообщение об ошибке «Раздел данных в режиме +прокрутки не может содержать внешние объекты».

            -

            , , - . - , , - - . -, 1300 , Programming Taskbook, - . - - Align, Programming Taskbook for Bio. +

            Возможность прокрутки разделов исходных и результирующих данных добавлена, прежде всего, +для использования в заданиях по параллельному программированию. +Однако она может оказаться полезной и в других случаях, например, при +использования в качестве исходных данных +нескольких двумерных массивов или массива строк. +Заметим, что ни в одном из 1300 заданий, входящих в базовый набор задачника Programming Taskbook, +прокрутка разделов исходных и результирующих данных не используется. +Большое количество заданий с прокруткой разделов исходных и результирующих данных +содержится в группе Align, входящей в задачник по строковым алгоритмам биоинформатике Programming Taskbook for Bio.

            -

            , 4.11 , - , - . +

            В режиме окна с динамической компоновкой, появившемся в версии 4.11 задачника, +раздельная прокрутка разделов не поддерживается, поэтому описанные в данном пункте +возможности приводят в данном режиме лишь к увеличению высоты соответствующего раздела задания.

            -

            +

            Импортирование существующих заданий в новую группу


            procedure UseTask(GroupName: string; TaskNumber: integer);
             
            -

            - TaskNumber GroupName. - . , - « -», , , html- , - . +

            Данная процедура позволяет импортировать в создаваемую группу задание +с номером TaskNumber из группы GroupName. +Она обычно вызывается непосредственно в основной процедуре группы. Если импортируемое задание не найдено, +то при попытке его запуска в окне задачника выводится сообщение «Задание не реализовано для текущего языка +программирования», и этот же текст, выделенный курсивом, указывается в html-описании группы после имени, +которое должно быть связано с импортированным заданием.

            -

            - , - . +

            При использовании мини-варианта задачника импортированные задания будут доступны для выполнения только в том случае, +если они доступны для выполнения в исходных группах.

            -

            GroupName - ( - #). , Demo Demo10 - Proc46, Demo11 — Proc49, Proc46, - Proc49 , 2. , - Demo11 Demo10, Demo8 ( -« » Demo11, Proc46 Proc49). - 2 : UseTask('Proc#2',49). +

            В параметре GroupName после имени группы можно дополнительно указывать поправку для вычисления +ссылки на другое задание (поправка является целым числом и отделяется от имени группы +символом #). Например, если в группу Demo в качестве задания Demo10 импортируется +задание Proc46, а в качестве Demo11 — задание Proc49, ссылающееся на Proc46, то при импортировании +задания Proc49 необходимо указать поправку, равную 2. Если этого не сделать, то в формулировке +задания Demo11 будет указана ссылка не на задание Demo10, а на задание Demo8 (поскольку оно находится +«на том же расстоянии» от задания Demo11, что и задание Proc46 относительно задания Proc49). +Добавление поправки 2 должно быть оформлено следующим образом: UseTask('Proc#2',49).

            -

            +

            Документирование группы заданий

            -

            , «». - , , . . -( - CreateTask). +

            Группы заданий можно снабжать комментариями, делая их «самодокументируемыми». +Комментарии можно добавлять не только к группе, но и к ее подгруппам, т. е. наборам подряд идущих заданий в пределах группы +(для включения задания в определенную подгруппу +необходимо указать заголовок этой подгруппы в качестве параметра процедуры CreateTask).

            -

            , html- . - () - . , . +

            Комментарии не отображаются в окне задачника, но включаются в html-описание группы. +Они располагаются между заголовком группы (подгруппы) +и формулировками заданий. Таким образом, эти комментарии представляют собой преамбулы к группе или ее подгруппам.

            - , , - . , - , html- . +Определять преамбулу к подгруппе имеет смысл только в случае, если с этой подгруппой связаны некоторые задания, +входящие в определяемую группу. Если группа не содержит заданий, связанных +с некоторой подгруппой, то преамбула этой подгруппы в html-описании не выводится.

            - - .

            +Для определения преамбул предназначены +следующие процедуры.


            procedure CommentText(S: string);
             
            -

            S , - . - S , -. , -\P ( ).

            +

            Данная процедура добавляет содержимое строки S к текущей преамбуле, +отделяя это содержимое от предыдущего текста преамбулы пробелом. +В строке S можно использовать управляющие последовательности, обеспечивающие ее +форматирование. Например, для перехода к новому абзацу преамбулы следует использовать последовательность +\P (управляющие последовательности чувствительны к регистру букв).


            procedure UseComment(GroupName: string[; SubgroupName: string]);
             
            -

            UseComment SubgroupName - GroupName , SubgroupName , - GroupName. - . GroupName SubgroupName - .

            -

            GroupName SubgroupName, ; - . +

            Процедура UseComment добавляет к текущей преамбуле текст преамбулы подгруппы SubgroupName +группы GroupName или, если параметр SubgroupName является пустой строкой или отсутствует, текст преамбулы самой +группы GroupName. Этот текст +отделяется от предыдущего текста преамбулы пробелом. Регистр символов в параметрах GroupName и SubgroupName +может быть произвольным.

            +

            Если группа с именем GroupName не найдена или в ней отсутствует подгруппа SubgroupName, то процедура не выполняет никаких действий; +сообщение об ошибке в этом случае не выводится.

            -

            CommentText UseComment CreateGroup; - . - - , - Subgroup, .

            +

            Процедуры CommentText и UseComment должны вызваться после функции CreateGroup; +при этом они определяют преамбулу данной группы. Для того чтобы они определяли +преамбулу какой-либо подгруппы данной группы, перед их вызовом необходимо вызвать +процедуру Subgroup, описываемую далее.


            procedure Subgroup(SubgroupName: string);
             
            -

            SubgroupName -. -( , dll-, inittaskgroup). +

            Данная процедура устанавливает режим добавления текста к преамбуле подгруппы SubgroupName текущей +группы. Этот режим сохраняется до следующего вызова данной процедуры или до завершения определения текущей группы заданий +(определение группы, создаваемой в виде dll-файла, завершается при выходе из процедуры inittaskgroup).

            - Subgroup , - . Subgroup — - (, - CreateGroup).

            +Процедуру Subgroup можно вызывать несколько раз для одной и той же подгруппы, при этом ранее определенный текст +преамбулы будет дополняться новыми данными. При вызове процедуры Subgroup с параметром — пустой строкой +устанавливается режим дополнения преамбулы группы (напомним, что этот режим устанавливается также +сразу после вызова процедуры CreateGroup).

            -

            +

            Константы и функции для определения текущего состояния задачника


            const
            @@ -645,54 +645,54 @@ DataN('N = ', n, 0, 2, 1);
               lgPascalABCNET = $0401;
               lgAll = $FFFFFF;
             
            -

            , CurrentLanguage, - , - (. . ) . - lgPascal, lgVB, lgCPP, lgCS, -lgVBNET, lgPascalABCNET, lg1C, lgPython, lgJava , - (Pascal, Visual Basic, C++, C#, Visual Basic .NET, -PascalABC.NET, 1:, Python, Java). - . - lg1C 4.9 ( - PT for 1C — - 1:), lgPython — 4.10 ( - Python), lgJava — 4.11 ( - Java). +

            Данные константы, совместно с описываемой далее функцией CurrentLanguage, +позволяют определить язык программирования, на который +в данный момент (т. е. в момент инициализации текущей группы заданий) настроен задачник. +Константы lgPascal, lgVB, lgCPP, lgCS, +lgVBNET, lgPascalABCNET, lg1C, lgPython, lgJava соответствуют конкретному языку из числа тех, которые +доступны в текущей версии задачника (Pascal, Visual Basic, C++, C#, Visual Basic .NET, +PascalABC.NET, 1С:Предприятие, Python, Java). +Эти константы являются битовыми флагами. +Константа lg1C появилась в версии 4.9 конструктора учебных заданий (в связи с реализацией +комплекса PT for 1C — варианта задачника +для системы 1С:Предприятие), константа lgPython — в версии 4.10 (в связи с реализацией +варианта задачника для языка Python), константа lgJava — в версии 4.11 (в связи с реализацией +варианта задачника для языка Java).

            -

            -(. . ) , - : +

            Некоторые константы являются комбинациями битовых флагов +(т. е. битовыми масками) и позволяют определить, к какой категории +относится текущий язык:

            -
            • lgAll — , -
            • lgNET — .NET -( C# Visual Basic .NET), -
            • lgWithPointers — , - ( Pascal C++), -
            • lgWithObjects — , - ( .NET, - Python Java). +
              • lgAll — любой язык, +
              • lgNET — язык платформы .NET +(языки C# и Visual Basic .NET), +
              • lgWithPointers — язык, для которого можно разрабатывать группы заданий +на обработку динамических структур с применением указателей (языки Pascal и C++), +
              • lgWithObjects — язык, для которого можно разрабатывать группы заданий +на обработку динамических структур с применением объектов (все языки платформы .NET, +а также Python и Java).
              -

              , PascalABC.NET, - Pascal .NET. - lgPascal lgPascalNET; , , , -lgWithPointers, lgWithObjects lgNET. PascalABC.NET lgPascalABCNET. +

              Особое место занимает язык, реализованный в системе PascalABC.NET, поскольку в нем объединяются +свойства обычного языка Pascal и языка платформы .NET. Данному языку соответствует комбинация +флагов lgPascal и lgPascalNET; это, в частности, означает, что он принадлежит одновременно к категориям +lgWithPointers, lgWithObjects и lgNET. Для языка PascalABC.NET предусмотрена также именованная константа lgPascalABCNET.


              function CurrentLanguage: integer;
               
              -

              , , . - - , , - , ; - . , , - .NET, : +

              Функция возвращает значение, соответствующее языку программирования, на который в данный момент настроен задачник. +Помимо сравнения +возвращаемого значения функции с константами, соответствующими конкретному языку, +можно также использовать данную функцию для определения категории, к которой относится текущий язык программирования; в этом +случае необходимо применять побитовые операции. Например, для проверки того, что текущий язык программирования +относится к категории языков платформы .NET, достаточно проверить истинность следующего условия:

              CurrentLanguage and lgNET <> 0
               
              -

              PascalABC.NET CurrentLanguage +

              При использовании задачника совместно с системой PascalABC.NET функция CurrentLanguage возвращает значение lgPascalABCNET.

              @@ -702,26 +702,26 @@ lgWithPointers, lgWithObjects
              function CurrentLocale: string;
               
              -

              , , . . , - . 4.11 CurrentLocale 'ru' -( ) 'en' ( ). +

              Функция возвращает строку, соответствующую текущей локали, т. е. текущему языку интерфейса, используемому +в задачнике. В версии 4.11 конструктора учебных заданий возможными возвращаемыми значениями функции CurrentLocale являются 'ru' +(русский вариант задачника) и 'en' (английский вариант).


              function CurrentVersion: string;
               
              -

              4.10 . - 'd.dd'. -, 4.11 '4.11'. , 4.10, - '4.00'. +

              Данная функция добавлена в версию 4.10 конструктора учебных заданий. +Она возвращает номер текущей версии задачника в виде строки числа формата 'd.dd'. +Например, в случае версии 4.11 возвращается строка '4.11'. Для версий, предшествующих версии 4.10, +функция возвращает строку '4.00'.

              -

              -

              PT4TaskMaker - : (Word), - (Sentence) (Text). +

              Образцы слов и предложений

              +

              Приведенные ниже элементы конструктора PT4TaskMaker позволяют получить доступ к +встроенным в него образцам текстовых исходных данных: словам (Word), +предложениям (Sentence) и многострочным текстам (Text).


              @@ -743,42 +743,42 @@ lgWithPointers, lgWithObjects function EnSentenceSample(N: integer): string; function EnTextSample(N: integer): string; -

              WordSample, SentenceSample TextSample - , , . . , -(. CurrentLocale): - , — . , - En, . +

              Функции WordSample, SentenceSample и TextSample +возвращают текстовые данные, соответствующие текущей локали, т. е. текущему языку интерфейса, используемому в задачнике +(см. функцию CurrentLocale): +для русского варианта задачника возвращаются русские данные, для английского — английские. Варианты этих функций, +снабженные префиксом En, возвращают английские текстовые данные в любом варианте задачника.

              -

              , Count, - . 4.11, , , - 116 , 61 85 , . +

              Функции, оканчивающиеся словом Count, возвращают количество +соответствующих элементов данных. В версии 4.11, конструктора учебных заданий, как и в его предыдущих версиях, +доступно 116 слов, 61 предложение и 85 текстов как на русском, так и на английском языке.

              -

              WordSample/EnWordSample SentenceSample/EnSentenceSample - N (  0).

              -

              TextSample/EnTextSample , , - N (  0). - #13#10 ( ). , - MaxLineCount. ; - , (« ») . - . +

              Функции WordSample/EnWordSample и SentenceSample/EnSentenceSample возвращают +соответственно слово или предложение с индексом N (индексирование проводится от 0).

              +

              Функция TextSample/EnTextSample возвращает строку, связанную с многострочным текстом, +имеющим индекс N (индексирование также проводится от 0). При этом между соседними строками этого текста +располагаются символы #13#10 (маркеры конца строки). В конце текста маркер конца строки отсутствует, +число строк в тексте не превышает значения константы MaxLineCount. Любой текст состоит из нескольких абзацев; +между абзацами текста помещается одна пустая строка, отступы в начале абзацев («красная строка») не используются. +В тексте не используются также переносы слов.

              -

              N , , SampleError. +

              Если параметр N является недопустимым, то все функции возвращают особую строку, равную константе SampleError.

              -

              «» . +

              Буква «ё» в русских текстовых данных не используется.

              -

              - () . - « » , -( ): +

              Все слова-образцы состоят из заглавных (прописных) букв. +Помимо слов «общего вида» в набор слов включены слова, обладающие следующими особенностями +(наличие подобных особых слов может оказаться полезным при составлении заданий):

              -
              • , ; -
              • , ( — «», — - «E»). +
                • слова, начинающиеся и оканчивающиеся одной и той же буквой; +
                • слова, содержащие три одинаковые буквы (в русском наборе — три буквы «А», в английском наборе — +три буквы «E»).
                -

                - 76 ; , -(, ). +

                Длина предложений-образцов не превосходит 76 символов; таким образом, любое предложение умещается на одной экранной строке +(напомним, что строки при выводе в окне задачника обрамляются апострофами).

                -

                , , -(. «»). +

                Многострочные тексты предназначены для использования, прежде всего, в заданиях на обработку текстовых файлов +(см. реализацию подобного задания в разделе «Примеры»).

                diff --git a/PABCNetHelp/ForEducation/MakeModules/tmaker_proc2.html b/PABCNetHelp/ForEducation/MakeModules/tmaker_proc2.html index 0d5efd126..8a91ac7e7 100644 --- a/PABCNetHelp/ForEducation/MakeModules/tmaker_proc2.html +++ b/PABCNetHelp/ForEducation/MakeModules/tmaker_proc2.html @@ -10,34 +10,34 @@ -

                PT4TaskMakerNET:

                +

                Модуль PT4TaskMakerNET: дополнительные компоненты


                -

                , - . +

                Если процедура имеет необязательные параметры, то +в списке параметров они заключаются в квадратные скобки.

                -

                +

                Процедуры для включения в задание файлов

                -

                PT4TaskMaker ( - ) 10 . - - , (, , , ). - 999 ( ); - , 999 , , 999, . - - , -, - text 70 .

                -

                , , - CreateTask.

                -

                , . - , - , .tst. +

                В конструкторе учебных заданий PT4TaskMaker предусмотрена возможность включения в каждое учебное задание (в +качестве исходных или результирующих данных) до 10 файлов. Кроме текстовых +файлов в заданиях можно использовать +двоичные файлы, все элементы которых имеют один и тот же тип (целочисленный, вещественный, символьный, строковый). +Каждый файл должен содержать не более 999 элементов (для текстовых файлов элементами считаются файловые строки); +в случае, если файл содержит более 999 элементов, элементы с номерами, превышающими 999, в окне задачника не отображаются. +Для корректного +отображения на экране, а также для правильной проверки результирующих файлов +необходимо, чтобы строки в двоичных строковых и текстовых файлах +и text состояли из не более чем 70 символов.

                +

                Все процедуры, связанные с определением файловых данных, следует вызывать после +вызова процедуры CreateTask.

                +

                Файлы должны создаваться в текущем каталоге, поэтому при задании их имен не следует указывать имя диска и путь. +Рекомендуется снабжать имена всех файлов, +используемых в заданиях, расширением .tst.

                -

                , , , - . - , — . +

                Все данные из файла, как правило, нельзя одновременно отобразить в окне задачника, поэтому для файловых +элементов предусмотрена возможность прокрутки. Для двоичных файлов прокрутка +выполняется в горизонтальном направлении, а для текстовых файлов — в вертикальном.


                procedure DataFileN(FileName: string; Y, W: integer);
                @@ -46,82 +46,82 @@
                 procedure DataFileS(FileName: string; Y, W: integer);
                 procedure DataFileT(FileName: string; Y1, Y2: integer);
                 
                -

                DataFile , N, R, C, S, - , , -. DataFileT . - , -, , . - FileName.

                -

                , - , DataFileT, - . , , -Y , - , W - , . - W, - ( - ); - W, , -, «*» () . - - W , - , - — , - . , - , SetPrecision; - - . , -, , - . - .

                -

                DataFileT Y1 - Y2 - , - . - .

                -

                Y, Y1, Y2 - 1 5 (Y Y1 - 0; ); Y1 - Y2. W - 1–72.

                -

                -DataFile , - . - . DataFile - , -Data, «», .

                -

                DataFile - . - . - ; - ( ) - .

                -

                - , - , «» , - . -, - , -DataFile. , - , . - , , - .

                -

                ( — ., , File4) - . - DataFile Y Y1 - 0. , - , DataFile - .

                -

                , - . , - Pascal; - , . - PascalABC.NET - file of ShortString. +

                Процедуры группы DataFile с именами, завершающимися символами N, R, C, S, позволяют включить в задание в качестве +исходного файла один двоичный файл с элементами целочисленного, вещественного, символьного и строкового типа +соответственно. Процедура DataFileT позволяет включить в задание в качестве исходного файла один текстовый файл. +К моменту вызова процедуры файл, включаемый в +задание, должен быть создан, заполнен исходными данными и закрыт. Имя этого +файла передается параметром FileName.

                +

                Два последних параметра имеют разный смысл для процедур, обрабатывающих +двоичные файлы, и для процедуры DataFileT, обрабатывающей +текстовые файлы. Для процедур, связанных с двоичными файлами, параметр +Y указывает номер экранной строки в области исходных данных, в +которой будут отображаться элементы данного файла, а параметр W +указывает количество позиций, отводимых под отображение одного элемента файла. +Если фактическая длина элемента файла оказывается меньше параметра W, +то изображение элемента дополняется пробелами (пробелы добавляются слева для числовых данных +и справа для символьных); если длина элемента файла +окажется больше значения W, то в конце поля, выделенного для его +вывода, будет указан символ «*» (звездочка) красного цвета. +При определении +параметра W необходимо предусматривать дополнительные позиции для пробелов, +служащих разделителями элементов, а в случае строковых и символьных +файлов — для апострофов, автоматически добавляемых к каждому элементу при его +отображении на экране. Способ отображения вещественных чисел устанавливается, +как и для обычных исходных данных, процедурой SetPrecision; +по умолчанию вещественные числа отображаются в формате с фиксированной +точкой и двумя знаками в дробной части. Количество элементов, отображаемых на +экране, определяется автоматически так, чтобы заполнить по возможности всю +экранную строку. Никакие другие исходные данные на этой +строке размещать нельзя.

                +

                Для процедуры DataFileT параметры Y1 +и Y2 определяют соответственно номер первой и последней экранной +строки той части области исходных данных, которая отводится под отображение +текстового файла. На каждой экранной строке размещается одна строка из +текстового файла.

                +

                Параметры Y, Y1, Y2 должны принимать +значения от 1 до 5 (Y и Y1 могут также принимать +значение 0; этот случай описан в конце данного раздела); значение Y1 +не должно превышать значение Y2. Параметр W должен лежать в +диапазоне 1–72.

                +

                При наличии нескольких исходных файлов вызов соответствующих процедур группы +DataFile может проводиться в любом порядке, независимо от порядка +расположения этих файлов на экране. При попытке размещения двух файлов на одной +экранной строке выводится сообщение об ошибке. Вызовы процедур группы DataFile +могут проводиться как до, так и после вызовов процедур группы +Data, определяющих «обычные», не файловые исходные данные.

                +

                Вызов процедур группы DataFile не влияет на содержимое +включаемых в задание файлов. Он лишь приводит к копированию этого содержимого в +специальный буфер в оперативной памяти. Созданная копия используется для +отображения содержимого файла на экране; это позволяет просматривать начальное +содержимое исходного файла и после его преобразования (или даже удаления) в +ходе решения задания.

                +

                Поскольку при различных тестовых испытаниях учебного задания желательно не +только изменять содержимое исходных файлов, но также и предлагать для обработки +файлы с различными именами, возникает опасность «засорения» диска файлами, +созданными при предыдущих при предыдущих тестовых испытаниях. Для того чтобы этого не +произошло, в задачнике предусмотрено автоматическое удаление при завершении +тестового испытания всех файлов, включенных в задание с помощью процедур группы +DataFile. Заметим, что это удаление производится и в случае +аварийного завершения программы, выполняющей учебное задание. Если же исходный +файл был удален самой программой, выполняющей задание, то задачник не будет +пытаться удалить этот файл еще раз.

                +

                Иногда (хотя и весьма редко — см., например, задание File4) при решении задания не требуется отображать +содержимое исходного файла на экране. В этом случае в соответствующей процедуре +группы DataFile параметр Y или Y1 +надо положить равным 0. Если исходный файл не требуется ни отображать на экране, +ни удалять после завершения тестового испытания, то в вызове процедуры группы DataFile +нет необходимости.

                +

                Следует заметить, что формат двоичных строковых файлов является различным для разных +языков программирования. В конструкторе предполагается, что подготовленный для включения в задание +двоичный строковый файл имеет формат языка Pascal; в дальнейшем сам задачник выполняет автоматическое +преобразование данного файла к формату того языка, на котором выполняется задание. +При реализации задания в конструкторе для среды PascalABC.NET +достаточно описать двоичный строковый файл как file of ShortString.

                -

                - -«». +

                Пример реализации +задания на обработку двоичных строковых файлов для различных языков программирования приводится в разделе +«Примеры».


                @@ -131,52 +131,52 @@ DataFile. procedure ResultFileS(FileName: string; Y, W: integer); procedure ResultFileT(FileName: string; Y1, Y2: integer); -

                ResultFile , N, R, C, -S, - - , , -. ResultFileT - . - , -, , . - , , , - .

                -

                ResultFile - DataFile, -, Y, Y1, Y2 - . - ResultFile , +

                Процедуры группы ResultFile с именами, завершающимися символами N, R, C, +S, позволяют включить в задание в качестве +результирующего файла +один двоичный файл с элементами целочисленного, вещественного, символьного и строкового типа +соответственно. Процедура ResultFileT позволяет включить в задание в качестве результирующего +файла один текстовый файл. +К моменту вызова процедуры файл, включаемый в +задание, должен быть создан, заполнен контрольными данными и закрыт. Под +контрольными данными понимаются, как обычно, данные, которые должны содержаться +в результирующем файле в случае правильного решения задания.

                +

                Смысл параметров процедур группы ResultFile совпадает со смыслом +соответствующих параметров процедур группы DataFile, за исключением +того, что теперь номера экранных строк Y, Y1, Y2 +относятся к области результирующих данных. Ограничения на параметры для процедур +группы ResultFile накладываются те же, что и для процедур группы DataFile.

                -

                ResultFile - - , -. , , - . -, ResultFile, - ( - ). , - . , - ResultFile, - , -. , , - . -; , -.

                -

                DataFile, - , -ResultFile Y -Y1 0 (., , File1). , , - - .

                -

                -, (. - DataFile). +

                В результате выполнения процедуры из группы ResultFile +содержимое указанного контрольного файла будет скопировано в специальный буфер в +оперативной памяти, после чего контрольный файл будет автоматически удален с +диска. В дальнейшем, при выполнении задания, файл с таким же именем должен быть +создан и заполнен требуемыми данными программой самого учащегося. Контрольные +данные, записанные в оперативную память процедурой из группы ResultFile, +используются при проверке правильности содержимого результирующего файла (созданного +в ходе выполнения задания). Кроме того, эти контрольные данные могут выводиться +на экран в качестве примера правильного решения. Имя файла и другие параметры, +указанные в процедуре ResultFile, будут также использоваться для +поиска и отображения на экране результирующего файла, созданного при выполнении +задания. Все результирующие файлы, созданные в ходе решения задания, +автоматически удаляются с диска при завершении программы. Подобное удаление производится и при аварийном завершении +программы; если же результирующий файл не создан, то попытка его удалить не +производится.

                +

                Как и в случае процедур группы DataFile, отображение некоторых +результирующих файлов можно отключить, положив в соответствующих процедурах +ResultFile значения параметров Y или +Y1 равными 0 (см., например, задание File1). Это, естественно, не отменит сравнения содержимого +результирующих файлов с контрольными данными и удаления результирующих файлов +при завершении программы.

                +

                При определении двоичных строковых файлов результатов необходимо следовать тем же +правилам, что и при определении исходных двоичных строковых файлов (см. завершающую часть +описания процедур группы DataFile).

                -

                +

                Процедуры для включения в задание указателей и динамических структур данных

                -

                - :

                +

                В учебные задания можно включать указатели только одного определенного в +задачнике типа:


                type
                   PNode = ^TNode;
                @@ -189,60 +189,60 @@ Y1 
                     Parent: PNode;
                   end;
                 
                -

                - -( Next Prev), ( Left Right), - ( Left, Right Parent). - , , (, , - ), - , «ptr», -, , P1 = ptr, PX = ptr . . - 36 , -0 35. 0 9 -(P0–P9), 10 35 — +

                Этот тип позволяет формировать одно- и двусвязные линейные динамические структуры +(при этом используются поля связи Next и Prev), бинарные деревья и деревья общего вида (при этом используются поля связи Left и Right), +а также бинарные деревья с обратной связью (при этом используются поля связи Left, Right и Parent). +Поскольку значение адреса, хранящегося в указателе, не представляет интереса (и, кроме того, +может изменяться при каждом тестовом запуске программы), на экране отображается +не оно, а условное обозначение указателя «ptr», снабженное обязательным +комментарием, например, P1 = ptr, PX = ptr и т. д. +В задании можно использовать до 36 различных указателей, которым присваиваются номера от +0 до 35. Указатели с номерами от 0 до 9 имеют комментарии с цифровым индексом +(P0–P9), а указатели с номерами от 10 до 35 — с буквенным (PA–PZ). - , «ptr» - «nil» ( , - ), , P1 = nil Pascal, -P1 = NULL C++. - , , - . +Если некоторый указатель имеет нулевое значение, то вместо текста «ptr» отображается +текст «nil» (или аналогичный текст с обозначением нулевого указателя, соответствующего текущему +языку программирования), например, P1 = nil для языка Pascal, +P1 = NULL для языка C++. Комментарии к указателям также +используются при отображении на экране динамических структур, если они содержат элементы, +с которыми связаны данные указатели.


                procedure SetPointer(NP: integer; P: PNode);
                 
                -

                -NP ( P, - ). , - , , +

                Эта процедура позволяет определить в учебном задании указатель с номером +NP (значение этого указателя при инициализации задания будет равно P, +однако при выполнении задания оно может измениться). Все прочие процедуры, +связанные с этим указателем и описываемые далее, используют не его конкретное значение, а номер NP.

                -

                NP 0  35; - (. ). SetPointer - NP , .

                +

                Номер NP должен лежать в диапазоне от 0 до 35; он указывается в обязательном +комментарии к данному указателю (см. выше). Если процедура SetPointer +для указателя с номером NP не вызвана, то указатель с этим номером будет иметь нулевое значение.


                procedure DataP([Cmt: string;] NP: integer; X, Y: integer);
                 procedure ResultP([Cmt: string;] NP: integer; X, Y: integer);
                 
                -

                DataP ResultP NP , -, -. - P# =, # , - ( NP 0 9 — , NP 10 35 — - A Z). ; - : ptr - nil . - , Cmt, - (, - Cmt = '  : ' NP = 6 - : : P6 = ptr). - Cmt . - DataP ResultP , - . Y - ( 1 5), X — ( 1 78; - , , - ).

                -

                , Cmt , 4.11 . +

                Процедуры DataP и ResultP помещают указатель с номером NP в список исходных или, +соответственно, результирующих данных учебного задания и отображают его на +экране. При отображении на экране указатель снабжается обязательным комментарием +вида P# =, где в качестве символа # указывается символ, связываемый +с указателем (для NP от 0 до 9 — соответствующая цифра, для NP от 10 до 35 — +заглавная латинская буква от A до Z). Само значение указателя на экран не выводится; +вместо него указывается одно из двух условных обозначений: ptr для +ненулевого указателя и nil для нулевого указателя. Как и прочие +элементы данных, указатель может снабжаться дополнительным комментарием Cmt, +который приписывается слева к обязательному (например, вызов +процедуры с параметрами Cmt = 'Адрес начала стека: ' и NP = 6 +приведет к выводу на экран следующей строки: Адрес начала стека: P6 = ptr). +В дополнительном комментарии Cmt можно использовать управляющие последовательности. +В процедурах DataP и ResultP задается также экранная позиция, начиная с +которой элемент данных выводится в соответствующую экранную область. Параметр Y +определяет номер строки (от 1 до 5), параметр X — позицию в строке (от 1 до 78; +как обычно, требуется, чтобы элемент данных вместе с комментарием полностью +умещался на строке).

                +

                Варианты данных процедур, в которых параметр Cmt отсутствует, добавлены в версию 4.11 конструктора.

                @@ -250,49 +250,49 @@ NP.

                procedure DataList(NP: integer; X, Y: integer);
                 procedure ResultList(NP: integer; X, Y: integer);
                 
                -

                DataList ResultList «- -» , , , - . NP ( - SetPointer), - , . . . - , . .

                +

                Процедуры DataList и ResultList предназначены для помещения структуры типа «одно- или двусвязный линейный динамический +список» в набор исходных или, соответственно, результирующих данных, а также для +вывода этой структуры на экран. Параметр NP задает номер указателя (предварительно +определенный процедурой SetPointer), который указывает на начало +данного списка, т. е. на его первый элемент. Если соответствующий указатель +является нулевым, то список считается пустым. Пустой список на экране не отображается.

                - - ; , - ( ShowPointer), - — (, Data ) - .

                -

                , - Data (, .23.). - , , - , , , . -, , , , - (, (23)), Next, - ( 46 - **). , - . - (. 3).

                +Непустой динамический список отображается на двух +экранных строках; первая строка содержит имена указателей, входящих в задание и +связанных с данным списком (они задаются процедурой ShowPointer), +во второй строке — значения элементов списка (точнее, их полей Data целого типа) +и виды связи между элементами.

                +

                Если память для элемента результирующего списка должна быть выделена программой учащегося, +то значение его поля Data на экране обрамляется точками (например, .23.). +Если в исходной динамической структуре требуется разрушить один или несколько элементов, то эти элементы выделяются более бледным цветом, +а в случае, если программа учащегося не освободит память, занимаемую этими элементами, они будут выделены красным цветом. +Наконец, если в списке, преобразованном программой учащегося, элементы располагаются не на требуемых местах, +то они заключаются в скобки (например, (23)), а если элемент списка содержит ошибочную ссылку Next, то она помечается +двумя красными звездочками (например 46 - **). Красные звездочки указываются в конце списка также в случае, если +его длина превышает максимально допустимую. +Специальные обозначения используются также для циклических списков (см. пример 3).

                - « » 14 TNode, - Data –9 99, Data - . 10–99, - (, — -. Dynamic70). - , - — . +Элемент данных типа «линейный список» должен содержать не более 14 элементов типа TNode, +причем значения их полей Data должны лежать в диапазоне от –9 до 99, поскольку для каждого поля Data +отводится по две экранные позиции. Для большей наглядности рекомендуется использовать числа из диапазона 10–99, +резервируя однозначные и отрицательные числа для особых элементов (например, барьерного элемента циклического списка — +см. задание Dynamic70). +Если значение элемента списка не умещается в поле вывода, то в его последней экранной позиции выводится +красная звездочка — признак ошибки.

                - , Next Prev; - : «=». - , Next, Prev - , - (, - TNode). - : «-». +Для отображения списка как двусвязного необходимо, чтобы в его элементах были определены поля связи Next и Prev; +в этом случае связи между соседними элементами списка обозначаются двойными линиями: «=». Если в задании +требуется использовать односвязный список, то для его элементов надо определить поле связи Next, а для полей Prev +следует указать значение, не связанное с +элементами этого списка (например, адрес какой-либо глобальной переменной типа TNode). +Связи между элементами односвязных списков обозначаются одинарными линиями: «-».

                -

                DataList ResultList - , - . ShowPointer, -SetNewNode SetDisposedNode - . +

                Вызов процедуры DataList или ResultList +приводит к тому, что соответствующий список становится текущей динамической структурой +для данного задания. Все последующие вызовы процедур ShowPointer, +SetNewNode и SetDisposedNode будут влиять на +эту текущую структуру.


                @@ -301,208 +301,208 @@ NP.

                procedure DataTree(NP, X, Y1, Y2: integer); procedure ResultTree(NP, X, Y1, Y2: integer); -

                -( ) (DataBinTree DataTree) - (ResultBinTree ResultTree) . - « — » («left child — right sibling»). - DataList ResultList, , - PNode, SetPointer. - ; - , . - , , ( ) ; - Y1 Y2 . - «» ( ), - : X , - . , - , ; , X, . +

                Эти процедуры предназначены для включения в задание бинарных деревьев и деревьев общего вида +(называемых также деревьями с произвольным ветвлением) в качестве исходных (DataBinTree и DataTree) +или результирующих (ResultBinTree и ResultTree) данных. Для деревьев общего вида используется +представление «левая дочерняя вершина — правая сестра» («left child — right sibling»). +Как и для процедур DataList и ResultList, описанных выше, +первым параметром этих процедур является номер указателя типа PNode, ранее определенного с помощью процедуры SetPointer. +В данном случае этот указатель должен указывать на корень добавляемого в задание дерева; если он является +нулевым указателем, то дерево считается пустым и не отображается на экране. +В отличие от процедур, связанных с линейными списками, для отображения дерева можно (и рекомендуется) выделять на экране более двух строк; +номера начальной и конечной экранной строки задаются параметрами Y1 и Y2 соответственно. +В отличие от других «прокручиваемых» данных (а именно типизированных и текстовых файлов), +дерево может не занимать выделенные для него строки по всей ширине: параметр X показывает, начиная с какой позиции экранных +строк будет отображаться дерево и связанная с ним информация. Следует отметить, что использовать для других целей можно +только левую часть строки, связанной с деревом; все позиции строки, начиная с позиции X, будут использоваться для отображения дерева.

                -

                - , - . ShowPointer, -SetNewNode SetDisposedNode - . +

                Вызов любой из описываемых процедур +приводит к тому, что соответствующее дерево становится текущей динамической структурой +для данного задания. Все последующие вызовы процедур ShowPointer, +SetNewNode и SetDisposedNode будут влиять на +эту текущую структуру.

                -

                , , . - , Data, -( , , 234, : +

                При отображении дерева используются обозначения, аналогичные тем, которые применяются при отображении линейных динамических структур. +В частности, в качестве вершины изображается значение ее поля Data, причем для вывода этого значения выделяются две экранные позиции +(если двух позиций недостаточно, например, в случае значения 234, то на второй из выделенных позиций изображается красная звездочка: 2*). - («-» «=»); - , , , - ( — .  6). - Parent; . +В качестве обозначения связей между вершинами используются одинарные и двойные линии («-» и «=»); +двойные линии, как и для линейных списков, означают, +что связь между вершинами является двусторонней (так называемые деревья с обратной связью — см. пример 6). +Обратная связь обеспечивается полем Parent; ее можно использовать только для бинарных деревьев.

                -

                . - ; , DataBinTree ResultBinTree. - ( — . - 5  6). - ( ); - , DataTree - ResultTree. , Left P, , P - () , , Right, - -«» P , P. - , , - (.  7). +

                Для деревьев предусмотрены два варианта отображения. Первый вариант предназначен для отображения +бинарного дерева; он применяется для деревьев, включенных в задание процедурами DataBinTree и ResultBinTree. +В этом варианте обе дочерние вершины располагаются ниже родительской вершины (на следующем уровне — см. +примеры 5 и 6). +Второй вариант предназначен для отображения дерева общего вида (вершины которого могут содержать более двух дочерних вершин); +он применяется для деревьев, включенных в задание процедурами DataTree +и ResultTree. В этом варианте вершина, определяемая полем Left вершины P, как обычно, располагается ниже и левее вершины P +и задает ее первую (левую) дочернюю вершину, а вершина, определяемая полем Right, моделирует +следующую вершину-«сестру» вершины P и поэтому располагается на том же уровне, что и вершина P. +Такой способ отображения деревьев позволяет, в частности, легко определить глубину дерева общего вида и номер уровня для любой его +вершины (см. пример 7).

                -

                , , : +

                Перечислим другие обозначения, имеющие тот же смысл, что и для линейных структур:

                -
                • , - , , .23. ( - SetNewNode); -
                • , , , : +
                  • если вершина дерева должна быть создана в программе учащегося, то данная вершина +выделяется слева и справа точками, например, .23. (для +этого используется процедура SetNewNode); +
                  • если в дереве, преобразованном программой учащегося, существующие вершины располагаются не на своих местах, то они заключаются в скобки: (23); -
                  • , -( , , , ); -
                  • Left Right , -, , , , , , - ( , ). +
                  • если в исходном дереве требуется разрушить одну или несколько вершин, то эти вершины выделяются более бледным цветом +(а в случае, если программа учащегося не освободит память, занимаемую этими вершинами, они будут выделены красным цветом); +
                  • если переход по ссылке Left или Right для данной вершины дерева невозможен, +то, как и в случае линейных структур, это отмечается красными звездочками, которые, однако, изображаются не рядом с данной вершиной, +а ниже вершины (что подчеркивает тот факт, что ошибка возникла при попытке перехода на следующий уровень дерева).
                  -

                  , , . Left Right - , . +

                  Для деревьев, в отличие от линейных структур, нулевые поля связи не отображаются. Если поле Left или Right +равно нулевому указателю, то на изображении дерева у соответствующей вершины просто отсутствует левая или правая связь.

                  -

                  18; , 4 , - , 4 ( ). , , - 78, 18 . -, 16 , 11 ; - , , , . +

                  Максимальное число вершин в дереве равно 18; это объясняется тем, что каждая вершина занимает 4 позиции экранной строки и, +кроме того, 4 начальных позиции отводятся под дополнительную информацию (номера уровней дерева). Поэтому, с учетом того, +что ширина экранной строки равна 78, вписать в нее можно только дерево с не более чем 18 вершинами. +Впрочем, в заданиях рекомендуется использовать не более 16 вершин, начиная вывод дерева с 11 экранной позиции; +это дает возможность использовать левую часть строк для отображения других данных, например, указателей, связанных с данным деревом.

                  -

                  , , 18. - , 0. , - ; . +

                  Количество уровней дерева ограничивается только количеством его вершин и, таким образом, может достигать 18. +В соответствии с общепринятой практикой, уровни дерева нумеруются от 0. Номер уровня отображается в левой части области, +отведенной под изображение дерева; он выделяется цветом и отделяется от изображения дерева двоеточием.

                  -

                  , , - , -(, , , , ). - , . - « », , , -, , « », - , , , -(.  8). - , . +

                  Если количество уровней превышает число экранных строк, выделенных для отображения дерева, то для дерева +становится возможной прокрутка, подобная прокрутке файловых данных +(точнее, данных из текстовых файлов, поскольку для деревьев, как и для текстовых файлов, прокрутка выполняется в вертикальном направлении). +На возможность прокрутки указывают дополнительные символы, которые изображаются слева от номера уровня. +Символ «стрелка вверх», расположенный на первой экранной строке, отведенной для отображения дерева, +означает, что изображение дерева можно пролистать вверх, а символ «стрелка вниз», +расположенный на последней экранной строке, отведенной для отображения дерева, означает, что изображение дерева можно пролистать вниз +(см. пример 8). В режиме окна с динамической компоновкой +все деревья отображаются полностью, поэтому отдельная прокрутка для них не требуется.

                  -

                  , , 0 ( ). - , , , - Parent nil. - , — . +

                  Обычно первая строка, отводимая под изображение дерева, содержит его корень и помечается слева числом 0 (нулевой уровень дерева). +Единственная ситуация, когда это правило нарушается, связана с ошибочным формированием бинарного дерева с обратной связью в случае, +если поле Parent корня не содержит значение nil. В этой ситуации перед строкой с изображением +корня дерева помещается еще одна строка, в которой над корнем изображается красная звездочка — признак ошибки.

                  -

                  , ; - , -, , - , Left Right , - . , :

                  -

                  • , -
                  • , , . +

                    Изображение дерева может также содержать строки, расположенные ниже последнего уровня; эти строки могут потребоваться +для вывода имен указателей, связанных с вершинами-листьями, расположенными на последнем уровне, +а также для вывода звездочек, отмечающих ошибочные ссылки Left или Right для вершин, +расположенных на последнем уровне дерева. Заметим, что ссылка считается ошибочной в двух случаях:

                    +

                    • если она содержит неверный адрес, +
                    • если она ссылается на вершину, которую нельзя отобразить, поскольку для этой вершины не предусмотрено экранного места.
                    -

                    , , 18. +

                    В частности, звездочки обязательно будут выведены при попытке отобразить на экране дерево с количеством вершин, превышающим 18.

                    - . , - Pascal; - nil - — (. SetObjectStyle), .

                    -

                    1 +Приведем примеры изображений линейных списков и деревьев. В этих примерах предполагается, что +в качестве текущего языка задачника выбран язык Pascal; +для других языков вместо nil используются обозначения нулевых указателей +или нулевых объектов — (см. описание процедуры SetObjectStyle), соответствующие этим языкам.

                    +

                    Пример 1

                    P1
                     24 - 23 >nil
                     

                    - P1; - : «–» - , , Next ( 24) ( 23). - Next nil. +Первый элемент данного списка связан с указателем P1; +список содержит два элемента и является односвязным: на это указывает символ «–» +между элементами, означающий, что поле Next первого элемента (со значением 24) указывает на второй элемент (со значением 23). +Поле Next второго элемента равно nil.

                    -

                    2 +

                    Пример 2

                         P1        P2
                     nil< 14 = 23 = 34 >nil
                     

                    - ( , — Next Prev, — - «=»), : -P1 , P2 — . +Данный список является двусвязным (двойная связь, использующая оба поля связи — Next и Prev, — +обозначается знаком «=»), причем в задании с этим списком связаны два указателя: +P1 указывает на его первый, а P2 — на его последний элемент.

                    -

                    3 +

                    Пример 3

                              P0
                     << = 15 - 23 = 34 = >>
                     

                    - ( -«<<» «>>»), . - , 23 ( P0) 15, -. . Prev 23 (, nil). - , - . -, ( 15 23) , . . Next 15 23. +Данный список является двусвязным циклическим списком (на его цикличность указывают символы +«<<» и «>>»), однако одна из его связей отсутствует. +А именно, элемент 23 (на который указывает указатель P0) не связан с предыдущим элементом 15, +т. е. поле Prev элемента 23 содержит ошибочное значение (например, равно nil). +При правильно разработанном задании подобная ситуация может возникнуть только для ошибочных списков, созданных +в программе учащегося. +Заметим, что связь в другом направлении (от 15 к 23) имеется, т. е. поле Next элемента 15 указывает на элемент 23.

                    -

                    4 +

                    Пример 4

                    PXPY
                     95 - 63 -.34.- >>
                     

                    - . . --, 95 (PX PY), -, -, 34 New -( ). , , . - SetNewNode. +Данный список является односвязным циклическим списком. Он имеет две особенности. +Во-первых, на элемент 95 указывают сразу два указателя (PX и PY), +и, во-вторых, элемент 34 должен быть размещен в памяти процедурой New при выполнении задания +(на это указывают обрамляющие его точки). Подобные элементы, естественно, могут содержаться только в результирующих списках. +Они определяются с помощью процедуры SetNewNode.

                    -

                    5 +

                    Пример 5

                    -

                     4. ( Data 96) - P1. +

                    Так выглядит на экране бинарное дерево глубины 4. С корнем этого дерева (поле Data которого равно 96) +связан указатель P1.

                    -

                    6 +

                    Пример 6

                    -

                    ( ). +

                    Так выглядит на экране бинарное дерево с обратной связью (номера уровней на данной иллюстрации не указаны).

                    -

                    7 +

                    Пример 7

                    -

                    ( ). - 13 : 71, 73 29. , - Left () , Right — () -. +

                    Так выглядит на экране дерево общего вида (номера уровней и имена связанных с деревом указателей на данной иллюстрации не указаны). +В данном случае корень дерева 13 имеет три непосредственных потомка: вершины 71, 73 и 29. Напомним, что в дереве общего вида +поле Left определяет первую (левую) дочернюю вершину, а поле Right — очередную (правую) вершину-сестру.

                    -

                    8 +

                    Пример 8

                    -

                    . - . , , - . +

                    Так выглядит на экране бинарное дерево с включенным режимом прокрутки. Дополнительной особенностью этого дерева является наличие точек +около каждой его вершины. Это означает, что данное дерево является результирующим, причем память для всех его вершин должна быть +выделена в программе учащегося.


                    procedure ShowPointer(NP: integer);
                     
                    -

                    NP - . , ShowPointer(1) -P1  1, 2  5. NP - , - ShowPointer . - NP -, .

                    -

                    -( , ). - ShowPointer - ; , -, (, P3P6). - , - . , - . - , ShowPointer , - (, - ), - — (, P1P2P3*). - , P*. - * .

                    +

                    Процедура обеспечивает отображение указателя с номером NP при выводе текущего +линейного списка или дерева. Например, ее вызов вида ShowPointer(1) обеспечил отображение указателя +P1 в примерах 1, 2 и 5. Если указатель номер NP +является нулевым, то вызов +процедуры ShowPointer игнорируется без вывода сообщения об ошибке. Если +указатель с номером NP не является нулевым и не связан ни с одним из элементов +списка, то выводится сообщение об ошибке.

                    +

                    С одним элементом списка или дерева можно связать не более двух указателей +(исключение составляет последний элемент списка, с которым можно связать не более трех указателей). +Порядок вызова процедур ShowPointer для одного и того же элемента списка +является произвольным; при отображении указателей, связанных с одним и тем же +элементом, они выводятся в отсортированном порядке (например, P3P6). +В случае списков имена указателей отображаются над элементом, и при наличии нескольких указателей на один элемент +их имена располагаются слева направо. В случае деревьев имена указателей располагаются под элементом, +и при наличии нескольких указателей на один элемент их имена располагаются одно под другим. +Если количество указателей, связываемых процедурами ShowPointer с данным элементом списка, +превосходит максимально допустимое (например, с последним элементом связывается +четыре различных указателя), то список связанных указателей дополняется символом +ошибки — звездочкой (например, P1P2P3*). +Если с элементом бинарного дерева связывается более двух указателей, то под вторым указателем изображается еще один указатель вида P*. +Символ ошибки * выделяется красным цветом.

                    - , (.  8), - ShowPointer , - SetNewNode ( - ShowPointer « P1»). +Если указатель надо связать с элементом списка или дерева, помеченным точками (см. пример 8), +то вызов процедуры ShowPointer для данного указателя надо выполнить до того, как для соответствующего элемента +списка или дерева будет вызвана процедура SetNewNode (в противном случае при вызове +процедуры ShowPointer будет выведено сообщение об ошибке вида «Не найден элемент с адресом P1»).


                    [Pascal] @@ -512,172 +512,172 @@ P1

                    [C++]

                    void SetNewNode(int NNode);
                     
                    -

                    NNode (  1) - , New ( - — .  4). - (.  8); - , - ( , 1; - . Tree13). +

                    Процедура определяет для текущего списка элемент с номером NNode (нумерация ведется от 1) +как элемент, который требуется разместить в памяти с помощью процедуры New в ходе выполнения задания (подобные +элементы выделяются в списке с помощью обрамляющих точек — см. пример 4). +Она также позволяет аналогичным образом выделить элемент текущего дерева (см. пример 8); +при этом предполагается, что +элементы дерева нумеруются в префиксном порядке (в частности, корень дерева всегда имеет номер 1; по поводу префиксного +порядка см. задание Tree13).

                    -

                    - ( - Result: ResultList, ResultBinTree, ResultTree). - NNode, - .

                    -

                    , NNode - , - ShowPointer SetNewNode.

                    -

                    ( New Pascal ) - , - , () -, « ».

                    +

                    Данная +процедура может применяться только к результирующим спискам и деревьям (для определения которых используются процедуры +группы Result: ResultList, ResultBinTree, ResultTree). Если +результирующий список или дерево не содержит элемента с номером NNode, то +выводится сообщение об ошибке.

                    +

                    В случае, если указатель на элемент номер NNode +требуется отобразить на экране, +вызов соответствующей процедуры ShowPointer необходимо выполнить до вызова процедуры SetNewNode.

                    +

                    Если при выполнении задания учащийся будет выделять память (процедурой New для языка Pascal или аналогичными средствами для других языков) +для тех элементов результирующего списка или дерева, для которых это не +предусмотрено заданием, то соответствующие элементы в результирующем списке (дереве) будут обрамлены +точками, что приведет к сообщению «Ошибочное решение».


                    procedure SetDisposedNode(NNode: integer);
                     
                    -

                    NNode ( - 1, ), - . - ( - Data: DataList, DataBinTree, DataTree). - NNode, - .

                    -

                    , SetDisposedNode, . - - , - .

                    +

                    Процедура определяет для текущего списка или дерева элемент с номером NNode (нумерация +ведется от 1, элементы дерева нумеруются в префиксном порядке), который требуется удалить из динамической памяти в ходе +выполнения задания. +Данная процедура может применятся только к исходным спискам и деревьям (для определения которых используются процедуры +группы Data: DataList, DataBinTree, DataTree). +Если исходный список или дерево не содержит элемента с номером NNode, то +выводится сообщение об ошибке.

                    +

                    Элементы, помечаемые с помощью процедуры SetDisposedNode, выделяются на экране цветом меньшей яркости. +Если они не удаляются из памяти в ходе +выполнения задания, то их цвет изменяется на красный и выводится соответствующее +сообщение об ошибке.


                    procedure SetObjectStyle;
                     
                    -

                    « » - PascalABC.NET. - , TNode PNode, - Node ( - .NET , , PascalABC.NET). +

                    Данная процедура устанавливает «объектный стиль» для динамических структур и связанных с ними ссылок +при выполнении задания в среде PascalABC.NET. +Она должна вызываться при формировании заданий, ориентированных на использование не записей TNode и связанных с ними указателей PNode, +а объектов класса Node (данный класс определен +в вариантах задачника для языков платформы .NET и, в частности, для языка PascalABC.NET).

                    -

                    Node . - , TNode, PNode . - .NET, Python Java, - Node. , 4.11 , -, , : - PascalABC.NET. - SetObjectStyle ( , Node, - ). +

                    При разработке заданий класс Node не используется. Даже если разрабатываемая группа заданий ориентирована +на его применение, сами задания надо создавать с помощью записей TNode, указателей PNode и описанных выше процедур. +Однако для решения подобных задач на языках платформы .NET, а также на языках Python и Java, вместо записей и связанных с ними указателей +надо применять объекты класса Node. Среди языков, поддерживаемых версией 4.11 задачника, имеется единственный +язык, позволяющий использовать как указатели, так и объекты: +это язык PascalABC.NET. Именно поэтому для данного языка +предусмотрена процедура SetObjectStyle (в прочих языках, использующих объекты Node, настройка объектного стиля в заданиях +на обработку динамических структур выполняется автоматически).

                    -

                    PascalABC.NET, - , - («» «», «» - «» . .), , - , « », SetObjectStyle -( « », - ). SetObjectStyle CreateTask -( , - , - ). , : +

                    Создавая задания на обработку динамических структур для языка PascalABC.NET, +разработчик должен указать учащемуся требуемый способ решения, +используя соответствующие термины в формулировке задания («запись» или «объект», «указатель» +или «ссылка» и т. п.), а также настроив, +при необходимости, вывод динамических структур на «объектный стиль», вызвав процедуру SetObjectStyle +(по умолчанию применяется «стиль указателей», подробно +описанный выше). Процедура SetObjectStyle должна быть вызвана после процедуры CreateTask +(необходимо также, чтобы ее вызов +располагался перед вызовами любых процедур, обеспечивающих добавление к заданию +динамических структур и связанных с ними указателей). В результате ее вызова изменяется отображение этих элементов данных, а именно:

                      -
                    • ptr Node (. . Node); -
                    • P A, , -A1 = Node ( - , P1, P2 - . . A1, A2 . .). +
                    • вместо текста ptr для непустого указателя указывается текст Node (т. е. имя непустого объекта типа Node); +
                    • в стандартном комментарии к указателю вместо буквы P указывается буква A, например, +A1 = Node (эту особенность +следует учитывать в формулировке задания, используя в ней вместо имен указателей P1, P2 +и т. д. имена объектов A1, A2 и т. д.).
                    -

                    ( P A) , - . , - ,  1, : +

                    Аналогичные изменения (символа P на символ A) выполняются и при отображении указателей, +связанных с динамическими структурами. Например, +односвязный список, приведенный в примере 1, при установке объектного стиля будет иметь следующий вид:

                    A1
                     24 - 23 >nil
                     
                    -

                    nil , PascalABC.NET , -«» . .NET «» - ; , C# null, VB.NET — - Noth ( Nothing). +

                    Слово nil осталось неизменным, так как в PascalABC.NET оно применяется для обозначения как нулевых указателей, так и +«пустых» объектов. При использовании других языков платформы .NET обозначения «пустых» объектов +соответствующим образом корректируются; так, для языка C# применяется обозначение null, а для языка VB.NET — +обозначение Noth (от слова Nothing).

                    -

                    , ObjDyn ObjTree, PascalABC.NET. - Dynamic Tree, . +

                    Заметим, что объектный стиль используется в базовых группах ObjDyn и ObjTree, имеющихся в варианте задачника для системы PascalABC.NET. +Эти группы с содержательной точки зрения полностью аналогичны группам Dynamic и Tree, ориентированным на применение указателей.

                    -

                    MPI-

                    +

                    Процедуры для разработки заданий по параллельному MPI-программированию

                    -

                    , , - , 4.9 Programming Taskbook. - - Programming Taskbook for MPI. +

                    Процедуры, описанные в настоящем разделе, связаны с разработкой заданий по параллельному программированию и +доступны в конструкторе учебных заданий, начиная с версии 4.9 задачника Programming Taskbook. +Подробное описание этих процедур приводится в соответствующем +разделе описания задачника Programming Taskbook for MPI.


                    procedure CreateTask([SubgroupName: string;] var ProcessCount: integer);
                     
                    -

                    CreateTask - -. CreateTask - ProcessCount. SubgroupName - , : - , , - . - SubgroupName , - - . +

                    Данные перегруженные варианты процедуры CreateTask +предназначены для инициализации задания по параллельному +программированию. От исходных вариантов процедуры CreateTask их +отличает наличие параметра ProcessCount. Параметр SubgroupName имеет +тот же смысл, что и для исходных вариантов процедуры: он определяет +заголовок подгруппы, в которую включается задание, если +разрабатываемую группу заданий целесообразно разбить на подгруппы. +Если параметр SubgroupName является пустой строкой или отсутствует, то +задание не связывается с какой-либо подгруппой.

                    -

                    ProcessCount . - 2 36 . ProcessCount - ; - . +

                    Параметр ProcessCount определяет количество процессов при выполнении задания в параллельном режиме. +Допускается использовать от 2 до 36 процессов. При определении параметра ProcessCount желательно применять датчик +случайных чисел; это позволит протестировать предложенный алгоритм решения при различном количестве процессов +параллельного приложения.

                    -

                    ProcessCount 1, - CreateTask ( - ProcessCount 1, , «» -). +

                    Если параметр ProcessCount меньше или равен 1, то для инициализации задания используется соответствующий вариант +процедуры CreateTask без данного параметра (при этом выходное значение +параметра ProcessCount полагается равным 1, а задание выполняется в обычном, «непараллельном» +режиме).

                    -

                    ProcessCount 36, - . +

                    Если параметр ProcessCount превосходит 36, то в окне задачника +выводится сообщение об ошибке.

                    -

                    ProcessCount - , «» , - CreateTask ProcessCount (. ). +

                    Способ использования параметра ProcessCount при инициализации задания по параллельному программированию +зависит от того, какую «роль» играет программа, вызвавшая +процедуру CreateTask с параметром ProcessCount (см. таблицу).

          - - - - - - - - - - - - - -
          «» +«Роль» программы ProcessCount - ProcessCount +Входное значение параметра ProcessCount +Выходное значение параметра ProcessCount
          -, +Непараллельная программа-загрузчик, обеспечивающая запуск параллельного варианта программы ( ) +Используется (определяет число процессов при запуске параллельного варианта программы) 0 +Всегда равно 0
          ( 0) +Главный процесс параллельной программы (процесс ранга 0) +Не используется ; +Равно числу процессов в параллельной программе; используется при формировании входных и выходных данных
          +Подчиненный процесс параллельной программы +Не используется 0 +Всегда равно 0
          , +Непараллельная программа, обеспечивающая демонстрационный запуск учебного задания +Используется ; +Всегда равно входному значению; используется при формировании входных и выходных данных
          @@ -685,22 +685,22 @@ P1


          procedure SetProcess(ProcessRank: integer);
           
          -

          - ProcessRank. - -. - 0. - (, - , -— ). +

          Данная процедура устанавливает в качестве текущего +процесса параллельного приложения процесс ранга ProcessRank. Все +числовые исходные и контрольные данные связываются с текущим +процессом. До первого вызова данной процедуры текущим процессом +считается процесс ранга 0. Процедуру можно вызывать несколько раз с +одним и тем же параметром (например, первый раз процесс делается +текущим при определении связанных с ним исходных данных, а второй раз +— при определении его контрольных данных).

          -

          ProcessRank 0 - N – 1, N — , - ProcessCount CreateTask. - -« SetProcess -0..N–1, N — -». +

          Параметр ProcessRank должен принимать значения в диапазоне от 0 +до N – 1, где N — количество процессов, +возвращаемое параметром ProcessCount процедуры CreateTask. При +нарушении этого условия выводится сообщение об ошибке +«Параметр процедуры SetProcess находится вне диапазона +0..N–1, где N — количество используемых +процессов».

          diff --git a/PABCNetHelp/ForEducation/MakeModules/tmaker_samples.html b/PABCNetHelp/ForEducation/MakeModules/tmaker_samples.html index ede0c58da..d21629c4d 100644 --- a/PABCNetHelp/ForEducation/MakeModules/tmaker_samples.html +++ b/PABCNetHelp/ForEducation/MakeModules/tmaker_samples.html @@ -10,21 +10,21 @@ -

          PT4TaskMakerNET:

          +

          Модуль PT4TaskMakerNET: примеры разработки учебных заданий


          -

          -

          , - , . +

          Создание простейшей сводной группы

          +

          Вначале опишем действия по созданию наиболее простого варианта группы заданий — сводной группы, +в которой не разрабатываются новые задания, а лишь производится перекомпоновка заданий из имеющихся групп.

          -

          - MakerDemo, Begin. -dll- , PT4MakerDemo. +

          Создадим группу +заданий MakerDemo, в которую импортируем два первых задания из базовой группы Begin. Следуя правилам об именовании +dll-файлов с группами заданий, дадим нашей библиотеке имя PT4MakerDemo.

          -

          PT4MakerDemo.pas, , : +

          Файл PT4MakerDemo.pas, содержащий сводную группу заданий, является кратким и имеет стандартную структуру:

          library PT4MakerDemo;
          @@ -40,8 +40,8 @@ end;
           
           procedure inittaskgroup;
           begin
          -  CreateGroup('MakerDemo', '  ',
          -    '. . , 2013', 'qwqfsdf13dfttd', 2, InitTask);
          +  CreateGroup('MakerDemo', 'Примеры различных задач',
          +    'М. Э. Абрамян, 2013', 'qwqfsdf13dfttd', 2, InitTask);
           end;
           
           procedure activate(S: string);
          @@ -53,49 +53,49 @@ begin
           end.
           
          -

          PT4TaskMakerNET, -InitTask, . - , - UseTask, . - 1 2 Begin. +

          К библиотеке подключается модуль PT4TaskMakerNET, после чего в ней описывается основная процедура группы заданий +InitTask, определяющая задание по его номеру. +Поскольку мы не создавали своих заданий, в данной процедуре +используется только стандартная процедура UseTask, позволяющая импортировать задания из имеющихся групп. +В нашем случае импортируются задания с номерами 1 и 2 из группы Begin.

          -

          . inittaskgroup -( , . . ). - CreateGroup, : - ('MakerDemo'), (' '), , - , (2) (InitTask). +

          Затем описывается процедура инициализации данной группы заданий. Она должна иметь стандартное имя inittaskgroup +(набранное строчными, т. е. маленькими буквами). В этой процедуре +вызывается процедура CreateGroup, в которой задаются настройки создаваемой группы: +имя ('MakerDemo'), описание ('Примеры различных задач'), сведения об авторе, +строковый ключ, число заданий (2) и основная процедура группы (InitTask).

          -

          inittaskgroup activate -( ), - ActivateNET, PT4TaskMakerNET. +

          После процедуры inittaskgroup описывается вспомогательная процедура activate +(ее имя также должно быть набрано строчными буквами), в которой необходимо вызвать +процедуру ActivateNET, описанную в модуле PT4TaskMakerNET.

          -

          +

          Тестирование созданной группы

          -

          , - PT4TaskMakerNET. PascalABC.NET - LIB PascalABC.NET, - . - , - (dll-) ( - « ». +

          Для успешной компиляции программы с созданной группой необходимо, чтобы ей был доступен +модуль PT4TaskMakerNET. Этот модуль входит в число стандартных модулей библиотеки системы PascalABC.NET +и размещается в подкаталоге LIB системного каталога PascalABC.NET, поэтому копировать его в рабочий каталог +не требуется. +Однако даже при успешной компиляции программы просмотреть задания группы не удастся, так как +созданную библиотеку (dll-файл) нельзя запускать на выполнение (при успешной компиляции будет выведено +сообщение «Невозможно запустить динамическую библиотеку».

          -

          - , . - PT4MakerDemo.dll, - - PT4Load. - ( [Shift]+[Ctrl]+[L]) - , , , - MakerDemo. - MakerDemo , , - PT4MakerDemo.dll. ( , - PT4) inittaskgroup activate, - . +

          Для тестирования полученной библиотеки +необходимо создать вспомогательную программу, являющуюся заготовкой для выполнения заданий из созданной группы. +Так как после успешной компиляции библиотеки в рабочем каталоге уже содержится файл PT4MakerDemo.dll, +для создания программы-заготовки можно использовать программный модуль PT4Load. +Вызвав его окно на экран (для этого достаточно использовать клавиатурную комбинацию [Shift]+[Ctrl]+[L]) +и удалив, при необходимости, имя ранее введенного задания, +мы должны увидеть в списке доступных групп заданий созданную нами группу MakerDemo. +Если имя группы MakerDemo не отображается, значит, задачник не смог успешно загрузить эту группу +из библиотеки PT4MakerDemo.dll. В этом случае необходимо проверить имя созданной библиотеки (в частности, +наличие в нем префикса PT4) и наличие в файле библиотеки процедур inittaskgroup и activate, +определенных по описанным выше правилам.

          -

          , «» «MakerDemo1» - [Enter] ( «»); MakerDemo1.pas, - PascalABC.NET. : +

          Если имя группы появилось в списке, то надо ввести в поле «Задание» имя «MakerDemo1» +и нажать клавишу [Enter] (или кнопку «Загрузка»); в результате будет создан файл MakerDemo1.pas, +который сразу загрузится в редактор среды PascalABC.NET. Приведем содержимое этого файла:

           uses PT4;
          @@ -105,116 +105,116 @@ begin
           
           end.
           
          -

          -, - - «?»: +

          Поскольку мы собираемся просматривать задания группы в демо-режиме, +добавим в конец строки с именем +задания символ «?»:

            Task('MakerDemo1?');
           
          -

          - : +

          После компиляции и запуска полученной программы на экране отобразится окно задачника +с указанным заданием данной группы:

          -

          , - 4.11 , . - , - ( , ), - . -[F4]. : +

          По умолчанию окно задачника отображается в режиме с динамической компоновкой, который появился +в версии 4.11 и является более наглядным, чем режим с фиксированной компоновкой. Однако +при разработке заданий желательно применять режим с фиксированной компоновкой, поскольку +он позволит выявить недостатки форматирования (в частности, вертикального выравнивания данных), +присущие только этому режиму. Для переключения между режимами отображения данных достаточно нажать клавишу +[F4]. После выполнения этого действия окно задачника изменится следующим образом:

          -

          -( [Enter] [Backspace], - (. . «») . - , PascalABC.NET. -, -, . +

          В окне задачника можно просматривать все имеющиеся задания данной группы +(нажимая клавиши [Enter] и [Backspace], а также генерировать различные варианты исходных данных +и связанных с ними контрольных (т. е. «правильных») результатов. При закрытии окна +программа немедленно завершит работу, и мы вернемся в редактор среды PascalABC.NET. +Заметим, что при последующих запусках программы будет автоматически выбираться тот режим окна +задачника, в котором оно находилось в момент его предшествующего закрытия.

          -

          . , - , - . Task, - , «?» : +

          Примечание. После добавления в группу нового задания было бы желательно, чтобы +при звпуске тестирующей программы на экране сразу отображались данные, связанные с последним +добавленным заданием. Чтобы не приходилось каждый раз изменять номер задания в процедуре Task, +можно удалить этот номер, указав символ «?» сразу после имени группы: Task('MakerDemo?'). - - . +В этом случае при запуске программы на экране будет отображаться +последнее задание данной группы.

          -

          +

          Добавление описания группы и ее подгрупп

          -

          , MakerDemo1 (. ), - , Begin - « , ». - MakerDemo () , -. , - . inittaskgroup - ( CreateGroup): +

          По тексту, расположенному выше названия задания MakerDemo1 (см. приведенные выше рисунки), +мы видим, что импортированные из группы Begin задания +входят в подгруппу с заголовком «Ввод и вывод данных, оператор присваивания». +В сводной группе MakerDemo мы можем добавить комментарий (преамбулу) как к самой группе, так и к любой имеющейся в ней +подгруппе. Кроме того, мы можем импортировать +преамбулу любой имеющейся группы или подгруппы. Для иллюстрации этих возможностей добавим в процедуру inittaskgroup +новые операторы (их надо указать после вызова процедуры CreateGroup):

          -
          CommentText('    ');
          -CommentText('\I  \i \MPT4TaskMaker\m.');
          +
          CommentText('Данная группа демонстрирует различные возможности');
          +CommentText('\Iконструктора учебных заданий\i \MPT4TaskMaker\m.');
           
          -Subgroup('   ,  ');
          -CommentText('    , ');
          -CommentText('  Begin.\P   ');
          -CommentText('    .\P');
          +Subgroup('Ввод и вывод данных, оператор присваивания');
          +CommentText('В этой подгруппе содержатся задания, импортированные');
          +CommentText('из группы Begin.\PПриводимый ниже абзац преамбулы');
          +CommentText('также импортирован из данной группы.\P');
           UseComment('Begin');
           
          -

          CommentText - MakerDemo. - : \I - \i , - \M \m , . - Subgroup . - , , , CommentText, - \P, . +

          Два первых вызова процедуры CommentText +определяют текст преамбулы для группы MakerDemo. Обратите внимание на +управляющие последовательности: пара последовательностей \I\i выделяет курсивный фрагмент, +а пара \M и \m выделяет фрагмент, в которым используется моноширинный шрифт. +Последующий вызов процедуры Subgroup устанавливает режим определения преамбулы для подгруппы с указанным именем. +В тексте этой преамбулы, который, как и текст преамбулы группы, определяется с помощью процедуры CommentText, +используется управляющая последовательность \P, обеспечивающая переход к новому абзацу.

          -

          , (UseComment) -Begin « , ». -UseComment, ; : - , . , - ( , ). Begin , - . +

          Наконец, последняя процедура (UseComment) импортирует преамбулу группы +Begin в преамбулу нашей подгруппы «Ввод и вывод данных, оператор присваивания». Имеется также вариант процедуры +UseComment, позволяющий импортировать преамбулу подгруппы; в этом варианте следует указать два параметра: имя группы и +заголовок требуемой подгруппы, входящей в эту группу. Импортировать преамбулы подгрупп можно только для тех групп заданий, в которых +имеется разделение на подгруппы (обычно это группы, содержащие большое количество заданий). В группе Begin деления на подгруппы нет, поэтому +из нее можно импортировать только преамбулу самой группы.

          -

          , html- MakerDemo. - , , - «?» Task «#»: Task('MakerDemo?'). - html- : +

          Для того чтобы ознакомиться с результатом сделанных изменений, следует сгенерировать html-страницу с текстом группы MakerDemo. +Для этого достаточно внести небольшое изменение в тестирующую программу, а именно, следует +заменить символ «?» в параметре процедуры Task на «#»: Task('MakerDemo?'). +Теперь при запуске данной программы на экране вместо окна задачника появится html-браузер с описанием созданной группы:

          -

          (« - »), Begin. +

          Обратите внимание на последний абзац в описании подгруппы («Все входные и выходные данные в заданиях этой группы являются +вещественными числами»), который был импортирован из группы Begin.

          -

          . Task «#», - (, Task('MakerDemo2#')), html- - . , - . html- ( ) - Task , «#». +

          Примечание. Если указать в параметре процедуры Task символ «#», +не удаляя номер задания (например, Task('MakerDemo2#')), то в html-описание +будет включено только задание с указанным номером. При этом будут также выведены комментарии ко всей группе и к той подгруппе, к +которой относится выбранное задание. Для включения в html-страницу нескольких заданий (или групп заданий) достаточно для каждого из них +вызвать процедуру Task с параметром, оканчивающимся символом «#».

          -

          -

          . Begin3, - . - , MakerDemo3 -( , , ): +

          Добавление нового задания

          +

          Добавим к нашей группе новое задание. Фактически это задание будет дублировать задание Begin3, +однако вместо импортирования этого задания мы разработаем его самостоятельно. Все действия по созданию +нового задания удобно реализовать во вспомогательной процедуре, которую можно назвать MakerDemo3 +(таким образом, название процедуры будет соответствовать имени создаваемого задания, хотя это и не является обязательным):

          procedure MakerDemo3;
           var
             a, b: real;
           begin
          -  CreateTask('   ,  ');
          -  TaskText('  ~{a} ~{b}.', 0, 2);
          -  TaskText('   {S}~=~{a}\*{b}   {P}~=~2\*({a}\;+\;{b}).',
          +  CreateTask('Ввод и вывод данных, оператор присваивания');
          +  TaskText('Даны стороны прямоугольника~{a} и~{b}.', 0, 2);
          +  TaskText('Найти его площадь {S}~=~{a}\*{b} и периметр {P}~=~2\*({a}\;+\;{b}).',
               0, 4);
             a := RandomN(1, 99) / 10;
             b := RandomN(1, 99) / 10;
          @@ -225,25 +225,25 @@ begin
             SetTestCount(3);
           end;
           
          -

          MakerDemo3 ( , ) - InitTask. +

          Описание процедуры MakerDemo3 (как и описания всех других процедур, обеспечивающих формирование новых заданий) +следует разместить перед описанием процедуры InitTask.

          -

          MakerDemo3 , : +

          Процедура MakerDemo3 включает все основные действия, используемые при формировании нового задания:

          -
          • ( CreateTask; - , - « , », . . , - ); -
          • ( TaskText; - ); -
          • ( DataR) -( ResultR); - ( RandomN); -
          • , -( SetTestCount; - ). +
            • инициализацию нового задания (процедура CreateTask; +мы указали в этой процедуре, что данное задание должно входить +в подгруппу «Ввод и вывод данных, оператор присваивания», т. е. в ту же подгруппу, что и два +предыдущих задания); +
            • определение его формулировки (процедуры TaskText; обратите внимание на используемые в +этих процедурах управляющие последовательности); +
            • определение исходных (процедуры DataR) и результирующих данных +(процедуры ResultR); при этом исходные данные генерируются с помощью +датчика случайных чисел (процедура RandomN); +
            • указание количества успешных тестовых запусков программы учащегося, достаточных для регистрации задания как выполненного +(процедура SetTestCount; +для нашего простого задания достаточно трех проведенных подряд успешных тестовых запусков).
            -

            MakerDemo, 3: +

            Необходимо также включить вызов созданной процедуры в основную процедуру группы MakerDemo, связав его с номером 3:

            procedure InitTask(num: integer);
             begin
            @@ -253,35 +253,35 @@ begin
               end;
             end;
             
            -

            , CreateGroup, 3. +

            Наконец, следует откорректировать число заданий в вызове процедуры CreateGroup, изменив его на 3.

            -

            , html- MakerDemo , - «#» «?» ( - Task Task('MakerDemo?')) - , - MakerDemo3. , - ; , - . +

            Запустив тестирующую программу, мы увидим в html-описании группы MakerDemo формулировки трех заданий, +а выполнив обратную замену в этой программе символа «#» на «?» (в результате +вызов процедуры Task опять примет вид Task('MakerDemo?')) и повторно запустив программу +на выполнение, мы увидим окно задачника +с загруженным заданием MakerDemo3. Заметим, что при последующих запусках проекта мы будем получать +в окне задачника различные исходные данные; это связано с тем, что при генерации исходных данных +используется датчик случайных чисел.

            -

            -

            MakerDemo : Matrix7 -( « (): »), - String, -: « : ». - MakerDemo4 MakerDemo5: +

            Добавление заданий на обработку двумерных массивов и символьных строк

            +

            Добавим к группе MakerDemo еще два задания: первое из них дублирует задание Matrix7 +(подгруппа «Двумерные массивы (матрицы): вывод элементов»), а второе +не имеет полного аналога в группе String, однако может быть отнесено к ее первой +подгруппе: «Символы и строки: основные операции». Реализуем эти задания +в процедурах MakerDemo4 и MakerDemo5:

            procedure MakerDemo4;
             var
               m, n, i, j, k: integer;
               a: array [1..5, 1..8] of real;
             begin
            -  CreateTask('  ():  ');
            -  TaskText('  ~{M}\;\x\;{N}   ~{K} (1~\l~{K}~\l~{M}).',
            +  CreateTask('Двумерные массивы (матрицы): вывод элементов');
            +  TaskText('Дана матрица размера~{M}\;\x\;{N} и целое число~{K} (1~\l~{K}~\l~{M}).',
                 0, 2);
            -  TaskText('  {K}-   .', 0, 4);
            +  TaskText('Вывести элементы {K}-й строки данной матрицы.', 0, 4);
               m := RandomN(2, 5);
               n := RandomN(4, 8);
               k := 1;
            @@ -305,51 +305,51 @@ procedure MakerDemo5;
             var
               s: string;
             begin
            -  CreateTask('  :  ');
            -  TaskText('  ~{S}.', 0, 2);
            -  TaskText('     .', 0, 4);
            +  CreateTask('Символы и строки: основные операции');
            +  TaskText('Дана непустая строка~{S}.', 0, 2);
            +  TaskText('Вывести ее первый и последний символ.', 0, 4);
               s := WordSample(RandomN(0, WordCount-1));
               if CurrentTest = 3 then
                 while s[1] = s[Length(s)] do
                   s := WordSample(RandomN(0, WordCount-1));
               DataS('S = ', s, 0, 3);
            -  ResultC(' : ', s[1], xLeft, 3);
            -  ResultC(' : ', s[Length(s)], xRight, 3);
            +  ResultC('Первый символ: ', s[1], xLeft, 3);
            +  ResultC('Последний символ: ', s[Length(s)], xRight, 3);
               SetTestCount(4);
             end;
             
            -

            Center - - : 5 , - . MakerDemo4 SetTestCount; - , , 5. +

            Обратите внимание на использование вспомогательной функции Center +для центрирования строк матрицы в области +исходных и результирующих данных: каждый элемент матрицы занимает 5 экранных позиций, а между +элементами размещается по одному пробелу. В процедуре MakerDemo4 не вызывается процедура SetTestCount; в этом случае +число успешных тестов, необходимых для регистрации задания как выполненного, по умолчанию полагается равным 5.

            -

            - , DataR ResultR, - ( Data Result 4.11 ). +

            При выводе элементов исходной матрицы и результирующей матричной строки дополнительные комментарии +указывать не требуется, поэтому используется вариант процедур DataR и ResultR, в котором комментарий +отсутствует (этот вариант процедур групп Data и Result добавлен в версию 4.11 конструктора учебных заданий).

            -

            MakerDemo5 - WordCount WordSample. - . , PT4TaskMaker -EnWordCount EnWordSample, . +

            В процедуре MakerDemo5 для получения исходных символьных строк используются +функции WordCount и WordSample. С помощью этих функций можно получать +различные варианты русских слов. Заметим, что в конструкторе PT4TaskMaker имеются также функции +EnWordCount и EnWordSample, с помощью которых можно получать варианты английских слов.

            -

            MakerDemo5 , 4.11 : - CurrentTest, - . - - , , - . - S -, - , . - , - , . -, , - while. CurrentTest - : , , - 3, . - CurrentTest. +

            В процедуре MakerDemo5 использована еще одна возможность, появившаяся в версии 4.11 конструктора: +функция CurrentTest, +возвращающая порядковый номер текущего тестового запуска. Использование этой функции позволяет +связать какой-либо особый вариант теста с некоторым номером тестового испытания, и тем самым гарантировать, +что программа с решением задачи обязательно будет проверена на этом особом варианте теста. +В нашем случае строка S выбирается из набора слов-образцов, среди которых имеется +сравнительно большое число слов, начинающихся и оканчивающихся одной и той же буквой. +Для более надежного тестирования решения желательно гарантировать, что в наборе тестов +будет хотя бы один тест, в котором начальный и конечный символ исходной строки различаются. +Разумеется, можно было бы всегда выбирать подобные строки, используя соответствующий +цикл while. Однако при наличии функции CurrentTest +в этом нет необходимости: достаточно выполнять подобный цикл для единственного теста, например, +с номером 3, как это сделано в приведенной реализации задания. +В дальнейшем мы рассмотрим более содержательный пример использования функции CurrentTest.

            -

            CreateGroup 5 - InitTask: +

            Осталось изменить количество заданий в вызове процедуры CreateGroup на 5 и +включить вызовы новых процедур в основную процедуру группы InitTask:

            procedure InitTask(num: integer);
             begin
            @@ -362,7 +362,7 @@ begin
             end;
             
            -

            : +

            Приведем вид окна задачника для новых заданий:

            @@ -371,11 +371,11 @@ end; -

            -

            MakerDemo : File63 -( « »), -— Text16 ( « : »). - MakerDemo6 MakerDemo7: +

            Добавление заданий на обработку файлов

            +

            Добавим к группе MakerDemo еще два задания: первое из них дублирует задание File63 +(подгруппа «Символьные и строковые файлы»), а второе +— задание Text16 (подгруппа «Текстовые файлы: основные операции»). Реализуем эти задания +в процедурах MakerDemo6 и MakerDemo7:

            function FileName(Len: integer): string;
            @@ -399,13 +399,13 @@ var
               s: ShortString;
               c: char;
             begin
            -  CreateTask('   ');
            +  CreateTask('Символьные и строковые файлы');
               TaskText(
            -  '  ~{K} (>\,0)   .'#13 +
            -  '   : ,   {K}~'#13 +
            -  '   ,  ,  {K}- '#13 +
            -  '  (   ~{K},    '#13 +
            -  '  ,      ).'
            +  'Дано целое число~{K} (>\,0) и строковый файл.'#13 +
            +  'Создать два новых файла: строковый, содержащий первые {K}~символов'#13 +
            +  'каждой строки исходного файла, и символьный, содержащий {K}-й символ'#13 +
            +  'каждой строки (если длина строки меньше~{K}, то в строковый файл'#13 +
            +  'записывается вся строка, а в символьный файл записывается пробел).'
               );
               s1 := '1' + FileName(5) + '.tst';
               s2 := '2' + FileName(5) + '.tst';
            @@ -437,14 +437,14 @@ begin
               Close(fs2);
               Close(fc3);
               DataN('K = ', k, 0, 1, 1);
            -  DataS('  : ', s1, 3, 2);
            -  DataS('   :  ', s2, 3, 4);
            -  DataS('   : ', s3, 3, 5);
            -  DataComment('  :', xRight, 2);
            +  DataS('Имя исходного файла: ', s1, 3, 2);
            +  DataS('Имя результирующего строкового файла:  ', s2, 3, 4);
            +  DataS('Имя результирующего символьного файла: ', s3, 3, 5);
            +  DataComment('Содержимое исходного файла:', xRight, 2);
               DataFileS(s1, 3, jmax + 3);
            -  ResultComment('   :',
            +  ResultComment('Содержимое результирующего строкового файла:',
                 0, 2);
            -  ResultComment('   :',
            +  ResultComment('Содержимое результирующего символьного файла:',
                 0, 4);
               ResultFileS(s2, 3, k + 3);
               ResultFileC(s3, 5, 4);
            @@ -456,9 +456,9 @@ var
               s, s1, s2, s0: string;
               t1, t2: text;
             begin
            -  CreateTask(' :  ');
            -  TaskText('  .', 0, 2);
            -  TaskText('     .', 0, 4);
            +  CreateTask('Текстовые файлы: основные операции');
            +  TaskText('Дан текстовый файл.', 0, 2);
            +  TaskText('Удалить из него все пустые строки.', 0, 4);
               s1 := FileName(6) + '.tst';
               s2 := '#' + FileName(6) + '.tst';
               s := TextSample(RandomN(0, TextCount-1));
            @@ -480,41 +480,41 @@ begin
               ResultFileT(s1, 1, 5);
               Rename(t2, s1);
               DataFileT(s1, 2, 5);
            -  DataS(' : ', s1, 0, 1);
            +  DataS('Имя файла: ', s1, 0, 1);
               SetTestCount(3);
             end;
             
            -

            FileName(Len), - Len ( ). - () . +

            При реализации этих заданий используется вспомогательная функция FileName(Len), позволяющая +создать случайное имя файла длины Len (без расширения). +Имя файла при этом будет содержать только цифры и строчные (маленькие) латинские буквы.

            -

            , FileName, .tst (, - File, Text Param ). +

            Имена файлов, полученные с помощью функции FileName, дополняются расширением .tst (заметим, что +в базовых группах File, Text и Param это расширение используется в именах всех исходных и результирующих файлов).

            -

            FileName MakerDemo6. +

            Функция FileName используется также для генерации элементов строкового файла в процедуре MakerDemo6.

            -

            , MakerDemo6 - : 1 , 2 , 3 . - MakerDemo7 - #, . +

            Для того чтобы предотвратить возможность случайного совпадения имен файлов, в процедуре MakerDemo6 к созданным именам +добавляются префиксы: 1 для первого файла, 2 для второго, 3 для третьего. +В процедуре MakerDemo7 имя +временного файла дополняется префиксом #, что также гарантирует его отличие от имени основного файла задания.

            -

            MakerDemo6 TaskText, - 4.11 . - TaskText , - , , , - #13, #10 #13#10 ( ). - TaskText - . +

            В процедуре MakerDemo6 использован новый вариант процедуры TaskText, +появившийся в версии 4.11 задачника. +В этом варианте процедура TaskText принимает один строковый параметр, который определяет +всю формулировку задания, причем в качестве разделителей строк, входящих в формулировку, можно использовать +символы #13, #10 или их комбинацию #13#10 (в указанном порядке). +Новый вариант процедуры TaskText позволяет более наглядно отобразить формулировку задания и +не требует указания дополнительных параметров.

            -

            - TextCount TextSample. , TextSample, - , — #13#10. - ( ). - -writeln, , , . +

            При реализации задания на обработку текстовых файлов для генерации содержимого файла используются +функции TextCount и TextSample. Строка, возвращаемая функцией TextSample, +представляет собой текст, содержащий маркеры конца строки — символы #13#10. Указанные символы +разделяют соседние строки текста (в конце текста маркер конца строки не указывается). +Благодаря наличию маркеров конца строки полученный текст можно записать в текстовый файл с помощью единственной процедуры +writeln, которая, кроме записи текста, обеспечивает добавление маркера конца строки в конец файла.

            -

            CreateGroup 7 - InitTask: +

            После разработки новых заданий необходимо изменить количество заданий в вызове процедуры CreateGroup на 7 и +включить вызовы новых процедур в основную процедуру группы InitTask:

            procedure InitTask(num: integer);
             begin
            @@ -529,28 +529,28 @@ begin
             end;
             
            -

            : +

            Приведем вид окна задачника для новых заданий:

            -

            +

            Добавление заданий на обработку динамических структур данных

            -

            , , - , -: , TNode - PNode, «», .NET- -(C#, Visual Basic .NET, PascalABC.NET), Python Java. - , , - TNode PNode . - , - Node ( ). +

            Наконец, добавим в нашу группу задание, +посвященное обработке динамических структур данных, причем представим его в двух +вариантах: традиционном, основанном на использовании записей типа TNode +и связанных с ними указателей типа PNode, и «объектном», характерном для .NET-языков +(C#, Visual Basic .NET, PascalABC.NET), а также языков Python и Java. +Следует подчеркнуть, что при разработке как традиционного, так и объектного варианта заданий +на динамические структуры надо использовать типы TNode и PNode и связанные с ними процедуры конструктора учебных заданий. +В то же время, при выполнении объектного варианта задания на соответствующем языке требуется +использовать объекты типа Node (которые при разработке задания не применяются).

            -

            , , Dynamic30, - ( « : »). - MakerDemo8 MakerDemo8Obj: +

            Задание, которое мы реализуем, дублирует задание Dynamic30, посвященное преобразованию +односвязного списка в двусвязный (подгруппа «Динамические структуры данных: двусвязный список»). +Оформим два варианта этого задания в виде процедур MakerDemo8 и MakerDemo8Obj:

            var WrongNode: TNode;
            @@ -583,7 +583,7 @@ begin
               p2^.Next := nil;
               SetPointer(1, p1);
               SetPointer(2, p2);
            -  ResultP(' : ', 2, 0, 2);
            +  ResultP('Последний элемент: ', 2, 0, 2);
               ResultList(1, 0, 3);
               ShowPointer(2);
               DataP(1, 0, 2);
            @@ -599,109 +599,109 @@ end;
             
             procedure MakerDemo8;
             begin
            -  CreateTask('  :  ');
            -  TaskText(' ~{P}_1     ' +
            -    '-  TNode,', 0, 1);
            -  TaskText('      Next.  ' +
            -    ' Prev  TNode,', 0, 2);
            -  TaskText('  (\I\i)  ' +
            -    ' \I\i,   ', 0, 3);
            -  TaskText('       ' +
            -    '(   Next),', 0, 4);
            -  TaskText('    (   Prev).  Prev ' +
            -    '  ', 0, 5);
            -  TaskText(' \N.      ' +
            -    ' .', 0, 0);
            +  CreateTask('Динамические структуры данных: двусвязный список');
            +  TaskText('Дан указатель~{P}_1 на начало непустой цепочки ' +
            +    'элементов-записей типа TNode,', 0, 1);
            +  TaskText('связанных между собой с помощью поля Next. Используя ' +
            +    'поле Prev записи TNode,', 0, 2);
            +  TaskText('преобразовать исходную (\Iодносвязную\i) цепочку ' +
            +    'в \Iдвусвязную\i, в которой каждый', 0, 3);
            +  TaskText('элемент связан не только с последующим элементом ' +
            +    '(с помощью поля Next),', 0, 4);
            +  TaskText('но и с предыдущим (с помощью поля Prev). Поле Prev ' +
            +    'первого элемента положить', 0, 5);
            +  TaskText('равным \N. Вывести указатель на последний элемент ' +
            +    'преобразованной цепочки.', 0, 0);
               MakerDemo8Data;
             end;
             
             procedure MakerDemo8Obj;
             begin
            -  CreateTask('  :  ');
            +  CreateTask('Динамические структуры данных: двусвязный список');
               TaskText(
            -  ' ~{A}_1     -  Node,'#13 +
            -  '       Next.   Prev'#13 +
            -  ' ,   (\I\i)   \I\i,'#13 +
            -  '          ( '#13 +
            -  ' Next),     (   Prev).  Prev'#13 +
            -  '    \O.  ~{A}_2  '#13 +
            -  '  .'
            +  'Дана ссылка~{A}_1 на начало непустой цепочки элементов-объектов типа Node,'#13 +
            +  'связанных между собой с помощью своих свойств Next. Используя свойства Prev'#13 +
            +  'данных объектов, преобразовать исходную (\Iодносвязную\i) цепочку в \Iдвусвязную\i,'#13 +
            +  'в которой каждый элемент связан не только с последующим элементом (с помощью'#13 +
            +  'свойства Next), но и с предыдущим (с помощью свойства Prev). Свойство Prev'#13 +
            +  'первого элемента положить равным \O. Вывести ссылку~{A}_2 на последний'#13 +
            +  'элемент преобразованной цепочки.'
               );
               SetObjectStyle;
               MakerDemo8Data;
             end;
             
            -

            , , . - - , MakerDemo8Data. - - (. , ). - , . +

            Анализируя приведенные варианты процедур, легко заметить, что они отличаются лишь деталями формулировки задания. +Алгоритмы генерации исходных и контрольных данных +для традиционного и объектного вариантов совпадают, поэтому они выделены в отдельную вспомогательную процедуру MakerDemo8Data. +В то же время представления динамических структур и связанных с ними +указателей или объектов будут отличаться (см. рисунки, приведенные ниже). Необходимые корректировки в представлении +динамических структур выполняются задачником автоматически, с учетом используемого языка программирования.

            -

            - PascalABC.NET , - : ( Delphi Free Pascal Lazarus) - ( C#, Visual Basic .NET, Python Java). - PascalABC.NET -, , ( , - ), -SetObjectStyle. . +

            Однако для +языка PascalABC.NET требуемую настройку необходимо выполнить явно, так как в нем можно использовать оба варианта +представления динамических структур: традиционный (как для обычного Паскаля в системах Delphi и Free Pascal Lazarus) +и объектный (как в языках C#, Visual Basic .NET, Python и Java). +Для того чтобы представление динамических данных при выполнении задания в среде PascalABC.NET соответствовало объектному +варианту, следует в начале процедуры, реализующей задание (перед вызовом любых процедур, связанных +с указателями и динамическими структурами), вызвать специальную процедуру без параметров +SetObjectStyle. Для остальных языков данная процедура не выполняет никаких действий.

            -

            5 . , - , TaskText, - 0 (. MakerDemo8). - «» - TaskText , (. MakerDemo9). - ( ) - , ; - , , . +

            Обратите внимание на возможность использования в формулировке задания более 5 экранных строк. Строки, которые +не умещаются в области формулировки задания, следует добавлять к заданию процедурой TaskText, +указывая в качестве последнего параметра процедуры число 0 (см. процедуру MakerDemo8). +Еще проще задавать «длинные» формулировки заданий с помощью нового варианта +процедуры TaskText с единственным строковым параметром, содержащим все строки формулировки (см. процедуру MakerDemo9). +При наличии подобных строк в окне задачника (если окно находится в режиме с фиксированной компоновкой) +слева от области формулировки появятся кнопки, обеспечивающие прокрутку формулировки задания; +кроме этих кнопок для прокрутки можно также использовать стандартные клавиши, в частности, клавиши со стрелками.

            -

            ( ) , - \N ( ) \O ( ). - PascalABC.NET nil. +

            Для того чтобы имя нулевого указателя (или объекта) соответствовало используемому языку программирования, +в формулировке задания применяются управляющие последовательности \N (имя нулевого указателя) и \O (имя нулевого объекта). +Для языка PascalABC.NET обе эти последовательности генерируют текст nil.

            -

            , , - ( ) , , . - . - , - , . - , CurrentTest, - 4.11 , - 2, — 4. , , - 5 «», - «» . +

            Достаточно часто алгоритмы, разработанные учащимися для обработки динамических структур данных, дают неверные результаты +в случае особых (хотя и допустимых) структур, например, состоящих только из одного элемента. Поэтому желательно +предусмотреть появление подобных структур в тестовых наборах исходных данных. +В наших заданиях исходный список, состоящий из +одного элемента, будет предлагаться программе учащегося в среднем один раз при каждых четырех тестовых испытаниях. +Кроме того, благодаря использованию функции CurrentTest, появившейся в +версии 4.11 конструктора, вариант списка с единственным элементом будет предложен программе учащегося для обработки +в тесте номер 2, а вариант списка с более чем одним элементом — в тесте номер 4. Таким образом, можно гарантировать, +что при прохождении набора из 5 тестовых испытаний программе будут предложены как «стандартные», +так и «особые» наборы исходных данных.

            -

            Prev - «» ( — WrongNode), - . , , , Prev - nil, - : Prev nil, -«» ( ) nil<. +

            При формировании односвязной структуры неиспользуемые поля Prev для каждого элемента структуры следует +положить равными адресу «фиктивного» элемента (в нашем случае — переменной WrongNode), +не связанного с данной структурой. Заметим, что для всех элементов, кроме первого, значения поля Prev +можно было бы положить равными nil, однако это не подходит для +первого элемента: если поле Prev первого элемента будет равно nil, то слева от него будет выведен +«лишний» (в данной ситуации) текст nil<.

            -

            : - ( ), - , , , - , . +

            Характерной особенностью разработки заданий на динамические структуры является обратный порядок создания этих структур: +вначале создаются контрольные структуры (которые сразу передаются в задачник), а затем они преобразуются в соответствующие +исходные структуры, которые должны не только передаваться в задачник, но и оставаться в памяти, чтобы в дальнейшем их можно было +использовать в программе учащегося, выполняющей это задание.

            -

            , , - . : +

            Если в группу включаются задания на динамические структуры, то необходимо анализировать текущий язык программирования, +используемый задачником. Это обусловлено двумя причинами:

            -
            • , - (, Visual Basic 1C); -
            • .NET, Python Java, «» -, Pascal C++. +
              • имеются языки, для которых отсутствует возможность выполнять +задания на обработку динамических структур (например, Visual Basic и 1C); +
              • в языках платформы .NET, а также Python и Java, необходимо использовать «объектный» стиль формулировок вместо +стиля, основанного на указателях и применяемого для языков Pascal и C++.
              -

              , PascalABC.NET, - , . , , -PascalABC.NET . +

              Кроме того, следует определиться с выбором стиля для языка PascalABC.NET, поскольку в нем +можно использовать как стиль указателей, так и стиль объектов. Можно, например, включить в группу заданий для языка +PascalABC.NET оба варианта каждого задания.

              -

              , - , , - . +

              Отмеченные обстоятельства приводят к тому, что для разных языков программирования создаваемая группа +может содержать разное число заданий и, кроме того, для этих заданий будут использоваться разные +инициализирующие процедуры.

              -

              InitTask : +

              С учетом этих замечаний изменим основную процедуру группы InitTask следующим образом:

              @@ -723,21 +723,21 @@ begin end;
          -

          CurrentLanguage, - , - . , - ( PascalABC.NET), - 8 MakerDemo8, . - , . - PascalABC.NET 9; - 9 «» 8. +

          В этой процедуре используется функция CurrentLanguage, +позволяющая определить текущий язык программирования, +используемый задачником. Если текущий язык относится к категории языков, +поддерживающих указатели (в том числе PascalABC.NET), то +в качестве задания номер 8 вызывается процедура MakerDemo8, в которой задание формулируется в терминах указателей. +В противном случае вызывается вариант задания, использующий объектную терминологию. +При использовании языка PascalABC.NET число заданий в группе будет равно 9; при этом дополнительное +задание номер 9 будет представлять собой «объектный» вариант задания номер 8.

          -

          CurrentLanguage inittaskgroup , - . - , CreateGroup begin -( , - CreateGroup n): +

          Функцию CurrentLanguage потребуется использовать и в начале процедуры inittaskgroup для того, чтобы +правильно определить количество заданий в группе для разных языков программирования. +Приведем фрагмент, на который надо заменить вызов процедуры CreateGroup и предшествующее ему ключевое слово begin +(обратите внимание на то, что теперь +в качестве предпоследнего параметра процедуры CreateGroup используется переменная n):

          var
             n: integer;
          @@ -748,52 +748,52 @@ begin
             else
             if CurrentLanguage and (lgWithPointers or lgWithObjects) <> 0 then
               n := 8;
          -  CreateGroup('MakerDemo', '  ',
          -    '. . , 2013', 'qwqfsdf13dfttd', n, InitTask);
          +  CreateGroup('MakerDemo', 'Примеры различных задач',
          +    'М. Э. Абрамян, 2013', 'qwqfsdf13dfttd', n, InitTask);
           
          -

          , - , , . , - ( lgPascalABCNET), - lgWithPointers lgWithObjects. , - , , - — , - . +

          Приведенный набор условий будет правильно определять количество заданий и в случае, +если состав языков, поддерживаемых задачником, будет расширен. Это обеспечивается тем, что +в условиях используются не константы для конкретных языков (за исключением константы lgPascalABCNET), +а битовые маски lgWithPointers и lgWithObjects. Первая из этих масок включает все языки, для которых +в задачнике можно использовать варианты заданий на динамические структуры, основанные на указателях, +а вторая — все языки, позволяющие использовать варианты аналогичных заданий +в объектной терминологии.

          -

          PascalABC.NET . - ( - , , — , ). - - , . +

          В среде PascalABC.NET можно протестировать оба варианта реализованного задания. +Приведем вид окна задачника для этого задания (первый рисунок соответствует +варианту задания, использующему указатели, второй — варианту, использующему объекты). +Обратите внимание +на кнопки, расположенные справа от формулировки задания и обеспечивающие ее прокрутку.

          -

          PT4MakerDemo, ( - inittaskgroup): +

          Завершая оформление модуля PT4MakerDemo, добавим комментарии к новым подгруппам заданий (указанные операторы следует поместить +в конец процедуры inittaskgroup):

          -
            Subgroup('  ():  ');
          -  CommentText('    Matrix7.');
          +
            Subgroup('Двумерные массивы (матрицы): вывод элементов');
          +  CommentText('Данное задание дублирует задание Matrix7.');
           
          -  Subgroup('   ');
          -  CommentText('    File63.');
          -  CommentText('  ,   ');
          -  CommentText('\I\i .');
          +  Subgroup('Символьные и строковые файлы');
          +  CommentText('Данное задание дублирует задание File63.');
          +  CommentText('Оно демонстрирует особенности, связанные с двоичными');
          +  CommentText('\Iстроковыми\i файлами.');
           
          -  Subgroup(' :  ');
          -  CommentText('    Text16.');
          +  Subgroup('Текстовые файлы: основные операции');
          +  CommentText('Данное задание дублирует задание Text16.');
           
          -  Subgroup('  :  ');
          -  CommentText('    Dynamic30.');
          -  CommentText('\P    :    ');
          -  CommentText('(  Pascal  C++)      (   .NET,');
          -  CommentText('  Python  Java).   Visual Basic   .');
          -  CommentText('  PascalABC.NET    .');
          +  Subgroup('Динамические структуры данных: двусвязный список');
          +  CommentText('Данное задание дублирует задание Dynamic30.');
          +  CommentText('\PЗадание реализовано в двух вариантах: основанном на использовании указателей');
          +  CommentText('(для языков Pascal и C++) и основанном на использовании объектов (для языков платформы .NET,');
          +  CommentText('а также Python и Java). Для языка Visual Basic это задание недоступно.');
          +  CommentText('В системе PascalABC.NET доступны оба варианта задания.');
           
          -

          html- : +

          Приведем заключительную часть html-страницы с описанием данной группы:

          diff --git a/PABCNetHelp/ForEducation/PT4/About.html b/PABCNetHelp/ForEducation/PT4/About.html index 62fc4ead4..d2e9817de 100644 --- a/PABCNetHelp/ForEducation/PT4/About.html +++ b/PABCNetHelp/ForEducation/PT4/About.html @@ -11,131 +11,131 @@ -

          Programming Taskbook

          +

          Электронный задачник Programming Taskbook


          -

          +

          Общее описание

          -

          Programming Taskbook - Pascal, Visual Basic, C++, C#, Visual Basic .NET, Python Java. - 1300 , - : - . 4.10, - , . +

          Электронный задачник Programming Taskbook предназначен для обучения +программированию на языках Pascal, Visual Basic, C++, C#, Visual Basic .NET, Python и Java. +Он содержит 1300 учебных заданий, охватывающих все основные разделы базового +курса программирования: от скалярных типов и управляющих операторов до +сложных структур данных и рекурсивных алгоритмов. Начиная с версии 4.10, в базовый +набор заданий входят группы, связанные с ЕГЭ по информатике и ИКТ.

          -

          Programming Taskbook - , - +

          Автором задачника Programming Taskbook является доцент +факультета математики, механики и компьютерных наук Южного федерального университета +Михаил Эдуардович Абрамян (mabr@math.sfedu.ru).

          -

          4.11 Programming Taskbook : +

          Версия 4.11 задачника Programming Taskbook реализована для следующих сред:

          -
          • Borland Delphi 7.0 2006, , Turbo Delphi 2006 for Windows, +
            • Borland Delphi 7.0 и 2006, в частности, Turbo Delphi 2006 for Windows,
            • Free Pascal Lazarus 1.0, -
            • Microsoft Visual Basic 5.0 6.0, +
            • Microsoft Visual Basic 5.0 и 6.0,
            • Microsoft Visual C++ 6.0, -
            • Microsoft Visual Studio .NET 2003, 2005, 2008, 2010 2012 ( Visual C++, Visual Basic .NET Visual C# .NET), +
            • Microsoft Visual Studio .NET 2003, 2005, 2008, 2010 и 2012 (языки Visual C++, Visual Basic .NET и Visual C# .NET),
            • Python 2.5, 2.6, 2.7, 3.2, -
            • NetBeans IDE 6.x 7.x ( Java). +
            • NetBeans IDE 6.x и 7.x (язык Java).
            -

            - Pascal ABC (http://sunschool.mmcs.sfedu.ru, - . . . ), «Pascal ABC & +

            Задачник +включен в учебную систему программирования Pascal ABC (http://sunschool.mmcs.sfedu.ru, +автор доц. С. С. Михалкович), образуя единый программный комплекс «Pascal ABC & Programming Taskbook». - - PascalABC.NET - - ProgrammingABC.NET WDE (http://www.pascalabc.net/WDE). +Задачник может также использоваться совместно +с системой программирования PascalABC.NET +и веб-средой разработки ProgrammingABC.NET WDE (http://www.pascalabc.net/WDE).

            -

            4.9, - Programming Taskbook for MPI - - MPI. +

            Начиная с версии 4.9, к задачнику в качестве +дополнения можно подключать комплекс Programming Taskbook for MPIэлектронный +задачник по параллельному программированию с использованием +технологии MPI.

            -

            4.10, - +

            Начиная с версии 4.10, к задачнику в качестве +дополнения можно подключать комплекс Programming Taskbook for Bioinformatics — - . +электронный задачник по строковым алгоритмам биоинформатики.

            -

            4.11 Python Java - ( , - ). +

            В версии 4.11 добавлена поддержка языков Python и Java +и дополнен интерфейс окна задачника (в частности, реализован новый режим +окна с динамической компоновкой).

            -

            Programming Taskbook -: +

            Задачник Programming Taskbook предоставляет учащимся следующие +возможности:

              -
            • ; -
            • ; -
            • ; -
            • -, ; -
            • , ; -
            • - ; -
            • - . +
            • отображение на экране текста задания и связанных с ним данных; +
            • демонстрация правильных результатов для каждого задания; +
            • предоставление исходных данных программе учащегося; +
            • выявление стандартных ошибок ввода-вывода, связанных с неверным количеством или неверным типом исходных или результирующих данных; +
            • проверка правильности результатов, полученных программой; +
            • запись в особый файл результатов информации о каждом тестовом +испытании программы; +
            • регистрация задания как выполненного после проведения серии +успешных тестовых испытаний программы.

            -

            - , - -, , , - . -, - , - . +

            Использование электронного задачника существенно ускоряет процесс +выполнения заданий, так как избавляет учащегося от дополнительных усилий по +организации ввода-вывода, что особенно удобно при обработке массивов, строк, +файлов и динамических структур. Предлагая учащемуся готовые исходные +данные, задачник акцентирует его внимание на разработке и программной реализации +алгоритма решения заданий, причем разнообразие исходных данных обеспечивает +надежное тестирование предложенного алгоритма.

            -

            « Programming Taskbook 4» - 28  2007 . ( - 2007611815). +

            Программный комплекс «Электронный задачник по программированию Programming Taskbook 4» +зарегистрирован в Реестре программ для ЭВМ 28 апреля 2007 г. (свидетельство об официальной регистрации +программы для ЭВМ номер 2007611815).

            -

            , , , - , +

            Подробная информация о задачнике, включающая его общее описание, формулировки всех учебных заданий, примеры +выполнения типовых заданий для различных языков программирования, содержится на сайте ptaskbook.com.

            -

            +

            Программные модули

            -

            : -

            • PT4Demo -, ; -
            • PT4Load - - ; -
            • PT4Results — , - , - . +

              В состав задачника входят следующие программные модули: +

              • PT4Demo — позволяет просмотреть в демонстрационном режиме все +задания, включенные в задачник; +
              • PT4Load — обеспечивает генерацию программы-шаблона для +требуемого учебного задания и ее немедленную загрузку в выбранную среду программирования; +
              • PT4Results — предназначен для расшифровки, анализа и отображения +на экране содержимого файла результатов, в который заносятся сведения о +ходе выполнения заданий.

              -

              PascalABC.NET - PascalABC.NET - «», :

              +

              В варианте задачника для PascalABC.NET эти модули +могут быть вызваны непосредственно из среды PascalABC.NET с помощью соответствующих команд +меню «Модули», а также кнопок и горячих клавиш:

                -
              • Shift+Ctrl+D PT4Demo, -
              • Shift+Ctrl+L PT4Load, -
              • Shift+Ctrl+R PT4Results. +
              • или Shift+Ctrl+D для PT4Demo, +
              • или Shift+Ctrl+L для PT4Load, +
              • или Shift+Ctrl+R для PT4Results.
              -

              4.11, PT4Results - , F2. +

              Начиная с версии 4.11, программный модуль PT4Results можно вызывать непосредственно +из окна задачника, используя клавишу F2.

              -- +Мини-вариант задачника

              -

               - , - PT4Setup). -, -, «°». - - 310 ,   Begin, Integer, -Boolean,   200   . - ,  - :

              +

              Часть заданий можно выполнять в мини-варианте задачника, не требующем приобретения лицензии +и регистрации лицензированной копии задачника с помощью программы настройки PT4Setup). +Задания, доступные для выполнения в мини-варианте, помечаются в окне задачника символом «°». +В мини-вариант включены 310 заданий, в том числе все задания групп Begin, Integer, +Boolean, а также 200 избранных заданий из других разделов задачника. +Ниже приводится список всех заданий, включенных в мини-вариант задачника:

              Begin1–Begin40, Integer1–Integer30, Boolean1–Boolean40, If4, If6, If8, If12, If22, If26, @@ -161,11 +161,11 @@ ExamTaskC53, ExamTaskC62, ExamTaskC68, ExamTaskC73, ExamTaskC81, ExamTaskC83, Ex ExamTaskC92, ExamTaskC97, ExamTaskC100.

              -

              - -, . - , , , - - . +

              Мини-вариант задачника можно рекомендовать для использования при самостоятельном изучении +программирования, так как он охватывает все основные темы и не содержит однотипных заданий. +Полный вариант задачника предназначен, прежде всего, для преподавателей программирования, поскольку +он позволяет легко создавать наборы индивидуальных заданий и существенно +повышает эффективность групповых практических занятий.

              diff --git a/PABCNetHelp/ForEducation/PT4/Demo.html b/PABCNetHelp/ForEducation/PT4/Demo.html index 95869cb7a..618181ed6 100644 --- a/PABCNetHelp/ForEducation/PT4/Demo.html +++ b/PABCNetHelp/ForEducation/PT4/Demo.html @@ -10,55 +10,55 @@ -

              +

              Демонстрационный режим


              - - Task - ?, :

              +Для запуска задачника в демонстрационном режиме следует +при указании имени задания в процедуре Task +дополнить это имя символом ?, например:

              Task('Begin12?');
              -

              ? , , 'Begin?'. - . +

              Можно также указать символ ? сразу после имени темы, например, 'Begin?'. +В этом случае в окне задачника сразу будет отображено последнее задание указанной группы.

              -

              : +

              Демонстрационный режим задачника имеет следующие особенности:

                -
              • , - -; -
              • - « -»; -
              • - ; - « » -; -
              • - ; - o -« » Enter, - -« » Backspace. - . +
              • даже если программа содержит решение задания, это решение +не анализируется и информация в файл результатов не +заносится; +
              • после отображения на экране окна задачника в разделе +результатов сразу будет выбрана вкладка «Пример верного +решения»; +
              • при одном запуске программы можно просмотреть несколько +вариантов исходных и контрольных данных; для смены набора +данных требуется нажать кнопку «Новые данные» или клавишу +пробела; +
              • при одном запуске программы можно последовательно +просмотреть все задания данной группы; для перехода к +заданию с бoльшим номером требуется нажать кнопку +«Следующее задание» или клавишу Enter, а для перехода к +заданию с меньшим номером требуется нажать кнопку +«Предыдущее задание» или клавишу Backspace. Задания +перебираются циклически.
              -

              . +

              На рисунке приведен вид окна задачника в демонстрационном режиме.

              -

              , 4.11, - : +

              При использовании динамической компоновки, появившейся в версии 4.11, +окно в демонстрационном режиме выглядит следующим образом:

              @@ -66,56 +66,56 @@ -

              - , - .

              -

              - , , -PT4Demo, PascalABC.NET - « | » ( - - Shift+Ctrl+D). +

              Демонстрационный режим удобно использовать для быстрого просмотра всех +заданий требуемой группы, а также различных вариантов исходных данных для +требуемого задания.

              +

              Для демо-просмотра всех групп заданий, включенных в базовый набор, предназначен программный модуль +PT4Demo, который вызывается непосредственно из среды PascalABC.NET командой +меню «Модули | Просмотреть задания» (с данной командой связана также +кнопка и клавиатурная +комбинация Shift+Ctrl+D).

              -

              PT4Demo. - ( -Ctrl+[<] Ctrl+[>]) ( - Ctrl+Shift+[<] Ctrl+Shift+[>]). +

              Ниже приводится вид окна модуля PT4Demo. В данном окне можно выбрать +группу заданий (для быстрого перебора групп предназначены горячие клавиши +Ctrl+[<] и Ctrl+[>]) и номер задания в пределах группы (номера можно перебирать +с помощью комбинаций Ctrl+Shift+[<] и Ctrl+Shift+[>]).

              -

              , -( , -). - , - results.abc.

              +

              Если задачник не зарегистрирован, то он всегда запускается в демонстрационном режиме +(исключение составляют задания, доступные для выполнения в мини-варианте). +Переключение в демонстрационный режим автоматически происходит также в случае, если в каталоге +с выполняемой программой отсутствует файл результатов results.abc.

              -

              4.8 html-. - ( html-, ) - Task, , - «#», , Begin# Begin3#. - , . - Task , #, - , ; html- - , Task ( ). +

              В версии 4.8 задачника добавлена возможность генерации текста формулировок учебных заданий и дополнительных пояснений к заданиям в виде html-страницы. +Для создания подобной страницы и ее немедленного отображения на экране (в html-браузере, установленном по умолчанию) +достаточно вызвать процедуру Task, указав в качестве ее параметра имя группы заданий или имя конкретного задания, дополненное +символом «#», например, Begin# или Begin3#. +При указании группы генерируется текст всех заданий, включенных в эту группу. +Процедуру Task с параметром, оканчивающимся символом #, +можно вызывать несколько раз, указывая различные имена групп или конкретных заданий; в результате созданная html-страница +будет содержать тексты всех заданий, указанных при различных запусках процедуры Task (в том же порядке).

              -

              - , , - html- . +

              Если при каком-либо вызове будет указано неверное имя группы или неверный номер задания в пределах группы, то выведется сообщение об ошибке, +и html-страница создана не будет.

              -

              html- , PT4Tasks.css, - , — PT4 - PascalABC.NET. , html- . +

              В создаваемую html-страницу включаются стилевые настройки, которые берутся из файла PT4Tasks.css, +который ищется в текущем каталоге, а при его отсутствии в этом каталоге — в подкаталоге PT4 системного +каталога PascalABC.NET. Если данный стилевой файл не найден, то стилевые настройки в html-страницу не добавляются.

              -

              html- PT4Tasks.html . - , . +

              При успешной генерации html-страницы она сохраняется в файле со стандартным именем PT4Tasks.html в рабочем каталоге приложения. +Если в этом каталоге нельзя создать файл, то выводится сообщение об ошибке.

              -

              html- PT4Demo. - (. ) F2. +

              Возможность просмотра html-страниц с описанием текущей группы заданий добавлена и в программный модуль PT4Demo. +Для этого предусмотрена кнопка (см. приведенный выше рисунок) и клавиша F2.

              diff --git a/PABCNetHelp/ForEducation/PT4/Groups.html b/PABCNetHelp/ForEducation/PT4/Groups.html index 2eb7ebfed..accafdfa1 100644 --- a/PABCNetHelp/ForEducation/PT4/Groups.html +++ b/PABCNetHelp/ForEducation/PT4/Groups.html @@ -9,116 +9,116 @@ -

              +

              Группы заданий


              -

              , Programming Taskbook - 4.11 (  ). +

              Ниже перечислены все базовые группы заданий, включенные в электронный задачник Programming Taskbook +версии 4.11 (в скобках указывается количество заданий в данной группе).

                -
              • Begin — , (40), -
              • Integer — (30), -
              • For — (40), -
              • Boolean — (40), -
              • If — (30), -
              • Case — (20), -
              • While — (30), -
              • Series — (40), -
              • Proc — (60), -
              • Minmax — (30), -
              • Array — (140), -
              • Matrix — () (100), -
              • String — (70), -
              • File — () (90), -
              • Text — (60), -
              • Param — (70), -
              • Recur — (30), -
              • Dynamic — (80), -
              • Tree — (100), -
              • ExamBegin — : (100), -
              • ExamTaskC — : (100). +
              • Begin — ввод и вывод данных, оператор присваивания (40), +
              • Integer — целые числа (30), +
              • For — цикл с параметром (40), +
              • Boolean — логические выражения (40), +
              • If — условный оператор (30), +
              • Case — оператор выбора (20), +
              • While — цикл с условием (30), +
              • Series — последовательности (40), +
              • Proc — процедуры и функции (60), +
              • Minmax — минимумы и максимумы (30), +
              • Array — одномерные массивы (140), +
              • Matrix — двумерные массивы (матрицы) (100), +
              • String — символы и строки (70), +
              • File — двоичные (типизированные) файлы (90), +
              • Text — текстовые файлы (60), +
              • Param — составные типы данных в процедурах и функциях (70), +
              • Recur — рекурсия (30), +
              • Dynamic — динамические структуры данных (80), +
              • Tree — деревья (100), +
              • ExamBegin — ЕГЭ по информатике: базовые алгоритмы (100), +
              • ExamTaskC — ЕГЭ по информатике: задачи повышенной сложности (100).
              -

              PascalABC.NET ObjDyn ObjTree, - Dynamic Tree, - ( Dynamic Tree ). +

              В варианте задачника для системы PascalABC.NET имеются две дополнительные группы ObjDyn и ObjTree, +в содержательном отношении идентичные группам Dynamic и Tree, однако использующие +в формулировках объектную терминологию (группы Dynamic и Tree ориентированы на использование указателей).

              -

              Programming Taskbook - PT4. -

              PT4TaskMaker, , - . +

              Для выполнения заданий из задачника Programming Taskbook к программе необходимо подключить +модуль PT4. +

              Используя конструктор учебных заданий PT4TaskMaker, можно создавать новые группы заданий, +включая в них новые задания или импортируя имеющиеся задания из других групп.

              -

              -

              , - . -Dynamic Tree ( ObjDyn ObjTree), - , .

              -

              , - ( , - ). - ; , - . , - , .

              -

              ( , ) -  1. , -  10  10 ´ 10 .

              -

              - , A N - 1 A1, -  N AN. , - B B1,1. , - (): - M × N  1, - —  M, —  N. - - .

              -

              , - , , - . , - , - .

              -

              - ( , - ). , , - ,  1.

              +

              Замечания о формулировках заданий и используемых в них данных

              +

              Если о типе исходных или результирующих числовых данных в задании ничего не сказано, +то предполагаются вещественные данные. Исключение составляет группы заданий +Dynamic и Tree (а также ObjDyn и ObjTree), +в которой все числовые данные считаются целыми, и в формулировках заданий это особо не оговаривается.

              +

              При обработке наборов вещественных чисел следует предполагать, что все элементы набора +являются различными (таким образом, любой набор вещественных чисел содержит единственный +минимальный и единственный максимальный элемент). В наборах целых чисел могут +присутствовать одинаковые элементы; в частности, наборы целых чисел могут содержать +несколько минимальных и максимальных элементов. Аналогичные предположения справедливы для числовых массивов, +а также для файлов, содержащих числовые данные.

              +

              Во всех заданиях на обработку массивов (как одномерных, так и двумерных) начальное значение +любого индекса считается равным 1. Если в задании не указан максимальный размер исходных массивов, +то его можно считать равным 10 для одномерных и 10 ´ 10 для двумерных массивов.

              +

              При описании элементов одномерных и двумерных массивов используется понятие порядкового +номера элемента, причем начальный элемент массива A размера N всегда имеет порядковый +номер 1 и обозначается в формулировках заданий как A1, а конечный элемент этого же +массива имеет порядковый номер N и обозначается как AN. Аналогично, +начальный элемент двумерного массива B обозначается как B1,1. Кроме того, +понятие порядкового номера применяется к строкам и столбцам двумерных массивов (матриц): +начальная строка и начальный столбец матрицы размера M × N имеют порядковый номер 1, +конечная строка — номер M, а конечный столбец — номер N. Подобный подход +не зависит от выбора языка программирования и соответствует традиционно используемой в математике +нумерации элементов векторов и матриц.

              +

              Максимальный размер исходных файлов не указывается, поэтому при решении заданий на файлы не следует +использовать вспомогательные массивы, содержащие все элементы исходных файлов, однако допускается +использование вспомогательных файлов. Все исходные файлы считаются существующими, за исключением +специально оговоренных случаев, в которых существование исходных файлов требуется проверять +в ходе выполнения задания.

              +

              Под размером двоичного типизированного файла всегда подразумевается количество +содержащихся в нем элементов указанного типа (а не количество байтов, как это принято +в операционной системе). В формулировках заданий предполагается, что элементы двоичных файлов, +как и элементы массивов, нумеруются от 1.

              -

              , +

              Задания, связанные с ЕГЭ по информатике

              -

              4.10, Programming Taskbook , - . Exam; -Pascal ( PascalABC.NET) C++. +

              Начиная с версии 4.10, задачник Programming Taskbook включает набор групп заданий, связанных с ЕГЭ по информатике +и ИКТ. Эти группы начинаются с префикса Exam; они доступны для программных сред языков +Pascal (в том числе PascalABC.NET) и C++.

              -

              Exam: ExamBegin, - , , - ExamTaskC, -, . 100 ; -20 - . +

              В базовый набор заданий включены две группы Exam: группа ExamBegin, +содержащая задания на освоение базовых алгоритмов, включенных в кодификатор ЕГЭ по информатике и ИКТ, +и группа ExamTaskC, содержащая типовые задания повышенного уровня +сложности, включенных в ЕГЭ в качестве заданий группы С. Каждая из групп состоит из 100 учебных заданий; +20 заданий каждой группы доступны для выполнения в мини-варианте задачника.

              -

              Exam , - -, . , - , , , , - - -: Read/Readln-Write/Writeln Pascal -- cin-cout C++. +

              Особенностью групп Exam является то, что при их выполнении не требуется использовать специальные +средства ввода-вывода, входящие в задачник. Для того чтобы максимально приблизить вид программы, +выполняющей задание, к виду, требуемому на экзамене, в задачнике реализован специальный механизм, +позволяющий оформлять ввод-вывод данных с применением стандартных средств используемого языка +программирования: процедур Read/Readln-Write/Writeln для языка Pascal и стандартных потоков +ввода-вывода cin-cout для языка C++.

              -

              Exam : - . - , - ( ExamTaskC), , , - . +

              При использовании заданий групп Exam сохраняются основные особенности задачника: автоматическое предоставление +программе учащегося исходных данных и автоматическая проверка правильности предложенного решения. +Следует отметить, что эти особенности оказываются наиболее полезными при решении задач повышенной +сложности (группа ExamTaskC), так как в них, как правило, +должны использоваться наборы исходных данных большого размера.

              -

              Exam -( , - ). +

              При выполнении заданий групп Exam учащийся должен обеспечивать надлежащее форматирование выходных данных +(в других группах заданий это не требуется, поскольку +средства вывода электронного задачника выполняют форматирование автоматически).

              -

              - , - - . - , - , «» -. +

              Отказ от использовании специальных средств ввода-вывода приводит к тому, что любые ошибки ввода-вывода +уже не обрабатываются задачником и обычно приводят к сообщениям об ошибке времени выполнения. +Это обстоятельство несколько затрудняет поиск ошибок, но в то же время +позволяет приблизить его к реальному процессу отладки программы, не использующему «подсказки» +задачника.

              diff --git a/PABCNetHelp/ForEducation/PT4/IO.html b/PABCNetHelp/ForEducation/PT4/IO.html index eae078fea..709251e65 100644 --- a/PABCNetHelp/ForEducation/PT4/IO.html +++ b/PABCNetHelp/ForEducation/PT4/IO.html @@ -36,14 +36,14 @@ -

              PT4

              +

              Модуль PT4


              -

              - , uses - PT4 (. , +

              Описанные в данном разделе типы и процедуры +будут доступны в программе, если к ней с помощью оператора uses +подключен модуль PT4 (см. пример программы, использующей задачник Programming Taskbook). -

              PNode TNode

              +

              Дополнительные типы данных PNode и TNode


              type
              @@ -58,62 +58,62 @@   end;
              -

              PNode TNode Dynamic Tree. -(Dynamic1–Dynamic28) TNode Data Next; - (Dynamic29–Dynamic80) Data, Next Prev. - ( Tree) Data, Left Right; - (Tree48–Tree56 Tree70–Tree71) - Parent. +

              Типы PNode и TNode используются в заданиях групп Dynamic и Tree. В заданиях на стеки и очереди +(Dynamic1–Dynamic28) при работе с записями типа TNode используются только поля Data и Next; +в заданиях на двусвязные списки (Dynamic29–Dynamic80) используются поля Data, Next и Prev. +В большинстве заданий на бинарные деревья (группа Tree) используются поля Data, Left и Right; +в заданиях на обработку бинарных деревьев с обратной связью (Tree48–Tree56 и Tree70–Tree71) дополнительно используется +поле Parent.

              -

              - PNode; - GetP PutP ( PascalABC.NET -, , - - read - write). +

              Все исходные и результирующие данные-указатели в заданиях имеют тип PNode; +их ввод и вывод должен осуществляться с помощью процедур GetP и PutP (в системе PascalABC.NET +указатели, как и другие данные, +можно получать из задачника и передавать ему с помощью стандартных процедур ввода-вывода readwrite).

              -

              PNode TNode. +

              В программе учащегося не следует повторно описывать типы PNode и TNode.

              -

              , –

              +

              Инициализация задания, ввод–вывод данных


              procedure Task(Name: string);
              -

              Name. - , ( - -). , - PT4, Task, - « Task - ».

              +

              Процедура инициализирует задание с именем Name. Она должна +вызываться в начале программы, выполняющей это задание (до вызова +процедур ввода-вывода). Если в программе, подключившей +модуль PT4, не указана процедура Task, то при запуске программы +будет выведено окно с сообщением «Не вызвана процедура Task с +именем задания».

              - Name - (, 'Begin3'). - . , - , - . - , , - . - Name ? -(, 'Begin1?'), - . +Имя задания Name должно включать имя темы и порядковый +номер в пределах темы (например, 'Begin3'). Регистр букв в имени темы +может быть произвольным. Если указана неверная тема задания, то +программа выведет сообщение об ошибке, в котором будут +перечислены названия всех имеющихся тем. Если указан +недопустимый номер задания, то программа выведет сообщение, в +котором будет указан диапазон допустимых номеров для данной темы. +Если после имени задания в параметре Name указан символ ? +(например, 'Begin1?'), то программа будет работать в +демонстрационном режиме.

              -

              4.8, Task - html- . - Name - #, , 'Begin3#' -'Begin#'. html- - , . +

              Начиная с версии 4.8, процедура Task может также использоваться для +генерации и вывода на экран html-страницы с текстом задания или группы заданий. +Для этого необходимо указать в качестве параметра Name имя конкретного задания или группы +заданий и символ #, например, 'Begin3#' или +'Begin#'. Дополнительные сведения о генерации html-страниц с описаниями заданий приводятся +в разделе, посвященном демонстрационному режиму задачника.

              -

              Task #, - Task . -Task #, - Task, . - Task, #, - html- , - . +

              Если при первом вызове процедуры Task в параметре не указывается символ #, то +все последующие вызовы процедуры Task игнорируются. Если при первом вызове процедуры +Task в параметре указывается символ #, +то игнорируются все последующие вызовы процедуры Task, не содержащие этот символ. +С помощью нескольких вызовов процедуры Task, содержащей в параметре символ #, можно обеспечить +генерацию html-страницы с описанием нескольких групп заданий, причем в каждой группе при этом можно отображать только +некоторые задания.


              @@ -127,26 +127,26 @@ procedure GetP(var X: PNode);

              - , - . - Task; - Task - « - Task ».

              +Процедуры обеспечивают ввод исходных данных в программу, +выполняющую учебное задание. Они должны вызываться после вызова +процедуры Task; +в случае их вызова до вызова процедуры Task при запуске программы +будет выведено сообщение об ошибке «В начале программы не +вызвана процедура Task с именем задания».

              -

              - ; - « -» ( , , - , - GetN).

              -

              , - , « - ». , - , , - « ».

              -

              PascalABC.NET Get - read. +

              Используемая процедура ввода должна соответствовать типу +очередного элемента исходных данных; в противном случае выводится +сообщение об ошибке «Неверно указан тип при вводе исходных +данных» (такое сообщение будет выведено, например, если очередной +элемент данных является символом, а для его ввода используется +процедура GetN).

              +

              При попытке ввести больше исходных данных, чем это +предусмотрено в задании, выводится сообщение об ошибке «Попытка +ввести лишние исходные данные». Если исходные данные, +необходимые для решения задания, введены не полностью, то +выводится сообщение «Введены не все требуемые исходные данные».

              +

              При использовании задачника в системе PascalABC.NET вместо процедур группы Get +можно использовать обычные процедуры ввода read.


              @@ -159,52 +159,52 @@ procedure PutP(X: PNode);

              - -, , - ( ). -Get, Task; - - Task - .

              -

              Get, - Put , ( -, ). - - , - .

              -

              Get, - Put - . - - , - , -, . -

              PascalABC.NET Put - write. +Процедуры обеспечивают вывод на экран результирующих +данных, найденных программой, и их сравнение с контрольными +данными (то есть с правильным решением). Как и процедуры группы +Get, эти процедуры должны вызываться после вызова процедуры Task; +в противном случае при запуске программы будет выведено сообщение +об ошибке «В начале программы не вызвана процедура Task +с именем задания».

              +

              В отличие от процедур группы Get, в качестве параметра процедур +группы Put можно указывать не только переменные, но и выражения (в +частности, константы соответствующего типа). Используемая +процедура должна соответствовать типу очередного элемента +результирующих данных, в противном случае выводится сообщение об +ошибке «Неверно указан тип при выводе результатов».

              +

              Как и в случае процедур группы Get, при вызовах процедур +группы Put программа осуществляет контроль за соответствием +количества требуемых и выведенных результирующих данных. Если +программа выведет недостаточное или избыточное количество +результирующих данных, то после проверки этих данных появится +сообщение «Выведены не все результирующие данные» или, +соответственно, «Попытка вывести лишние результирующие данные». +

              При использовании задачника в системе PascalABC.NET вместо процедур группы Put +можно использовать обычные процедуры вывода write.


              procedure Dispose(var P: PNode);

              - Dispose , - Dynamic Tree.

              +Данная процедура переопределяет стандартную процедуру Dispose для того, чтобы +контролировать действия учащегося по освобождению памяти при выполнении заданий групп Dynamic и Tree.

              -

              Node – .NET

              +

              Класс Node и альтернативный ввод–вывод в стиле .NET

              -

              Programming Taskbook, PascalABC.NET, - -, , - .NET. - , - PascalABC.NET , - , .NET-, -.NET, . +

              В варианте задачника Programming Taskbook, включенном в систему PascalABC.NET, предусмотрен +альтернативный способ организации ввода-вывода, характерный не для традиционного Паскаля, +а для языков платформы .NET. Наличие двух способов ввода-вывода обусловлено тем обстоятельством, что +система PascalABC.NET позволяет разрабатывать программы как в стиле, характерном для +традиционного Паскаля, так и в .NET-стиле, ориентированном на использование стандартных средств платформы +.NET, в том числе ее библиотеки классов.

              -

              - PascalABC.NET - Node, PNode TNode - « ». , - ObjDyn ObjTree, ( Dynamic Tree) - «» , .NET. +

              Кроме новых средств ввода-вывода в варианте задачника для системы PascalABC.NET предусмотрен +класс Node, который следует использовать вместо типов PNode и TNode при +выполнении заданий на динамические структуры «в объектном стиле». Заметим, что в этом случае +необходимо пользоваться группами ObjDyn и ObjTree, в которых (в отличие от групп Dynamic и Tree) +применяется «объектная» терминология, ориентированная на применение классов платформы .NET.


              @@ -214,49 +214,49 @@   Node = class(IDisposable)
                . . .
                public
              -  // :
              +  // Конструкторы:
                  constructor Create;
                  constructor Create(aData: integer);
                  constructor Create(aData: integer; aNext: Node);
                  constructor Create(aData: integer; aNext, aPrev: Node);
                  constructor Create(aLeft, aRight: Node; aData: integer);
                  constructor Create(aLeft, aRight: Node; aData: integer; aParent: Node);
              -  // ( ):
              +  // Свойства (доступны для чтения и записи):
                  property Data: integer;
                  property Next: Node;
                  property Prev: Node;
                  property Left: Node;
                  property Right: Node;
                  property Parent: Node;
              -  // , , Node:
              +  // Метод, освобождающий ресурсы, используемые объектом Node:
                  procedure Dispose;
                end; -

              Node ObjDyn ObjTree. - (ObjDyn1–ObjDyn28) Node - Data Next; -(ObjDyn29–ObjDyn80) Data, Next Prev. - ( ObjTree) Data, Left Right; - -(ObjTree48–ObjTree56 ObjTree70–ObjTree71) Parent. +

              Класс Node используется в заданиях групп ObjDyn и ObjTree. В заданиях на +стеки и очереди (ObjDyn1–ObjDyn28) при работе с объектами типа Node +используются только свойства Data и Next; в заданиях на двусвязные списки +(ObjDyn29–ObjDyn80) используются свойства Data, Next и Prev. В большинстве заданий на +бинарные деревья (группа ObjTree) используются свойства Data, Left и Right; +в заданиях на обработку бинарных деревьев с обратной связью +(ObjTree48–ObjTree56 и ObjTree70–ObjTree71) дополнительно используется свойство Parent.

              -

              Node -; -( 0 Data, nil ). +

              Варианты конструктора класса Node позволяют задавать значения требуемых свойств при создании +объекта; прочие свойства инициализируются нулевыми значениями +(числом 0 для свойства Data, нулевой ссылкой nil для остальных свойств).

              -

              , -IDisposable, Node - Dispose, , - ( , - ). - Dispose , , - « Dispose - Node». +

              Следует обратить внимание на то, что данный класс реализует интерфейс +IDisposable, поэтому при завершении работы с объектом типа Node требуется вызвать +его метод Dispose, освобождающий неуправляемые ресурсы, выделенные для этого +объекта (исключение делается только для тех объектов, которые передаются обратно +задачнику в качестве результирующих данных). Если в задании требуется вызвать +метод Dispose для некоторых объектов, но этот вызов не выполняется, то при запуске +программы выводится сообщение об ошибке «Не вызван метод Dispose для +объекта типа Node».

              -

              - ObjDyn ObjTree - Node; -GetNode Put, . +

              Все исходные и результирующие данные-ссылки в заданиях группы ObjDyn и ObjTree +имеют тип Node; их ввод и вывод должен осуществляться с помощью функции +GetNode и процедуры Put, описанных ниже.


              @@ -270,91 +270,91 @@ function GetString: string;
              -

              , - , , - .NET ( - .NET ). - Task; - Task - « Task - ». +

              Функции обеспечивают ввод исходных данных в программу, +выполняющую учебное задание, причем ввод организуется в стиле, +характерном для платформы .NET (поскольку +в стандартной библиотеке .NET ввод данных всегда выполняется с помощью функций). +Эти функции должны вызываться после вызова процедуры Task; +в случае их вызова до вызова процедуры Task при запуске программы будет выведено +сообщение об ошибке «В начале программы не вызвана процедура Task с +именем задания».

              -

              - ; -« » ( - , , , - GetInt). +

              Используемая функция ввода должна соответствовать типу очередного элемента +исходных данных; в противном случае выводится сообщение об ошибке +«Неверно указан тип при вводе исходных данных» (такое сообщение +будет выведено, например, если очередной элемент данных является символом, а для +его ввода используется функция GetInt).

              -

              , -, « -». , , - , « -». +

              При попытке ввести больше исходных данных, чем это предусмотрено в +задании, выводится сообщение об ошибке «Попытка ввести лишние исходные +данные». Если исходные данные, необходимые для решения задания, введены +не полностью, то выводится сообщение «Введены не все требуемые исходные +данные».


              procedure Put(params A: array of object);
              -

              Put , -, ( -). Get, Put - Task; - « Task -». +

              Процедура Put обеспечивает вывод на экран результирующих данных, найденных +программой, и их сравнение с контрольными данными (то есть с правильным +решением). Как и описанные выше функции группы Get, процедура Put должна вызываться после вызова +процедуры Task; в противном случае при запуске программы будет выведено сообщение +об ошибке «В начале программы не вызвана процедура Task с именем +задания».

              -

              -, params, - Put . - boolean, integer, real, char, string, Node. - Put - , ( , - , nil. , , Node, - ObjDyn ObjTree. - , - « Put -». +

              Благодаря использованию параметра-массива, снабженного атрибутом params, +при вызове процедуры Put можно указывать произвольное число параметров. Параметры +могут иметь тип boolean, integer, real, char, string, Node. +В качестве параметров процедуры Put +можно указывать не только переменные, но и выражения (в частности, константы +соответствующего типа, а также нулевую ссылку nil. Заметим, что нулевые ссылки, как и объекты типа Node, требуется +выводить только в заданиях групп ObjDyn и ObjTree. Если в списке параметров указываются +параметры недопустимого типа, то при выполнении программы выводится +сообщение об ошибке «В методе Put указан параметр недопустимого +типа».

              -

              , - ; - « ». +

              Тип параметра должен не только быть допустимым, но и соответствовать типу +очередного элемента результирующих данных; в противном случае выводится +сообщение об ошибке «Неверно указан тип при выводе результатов».

              -

              Get, Put - - . - , - « » , -, « ». +

              Как и в случае функций группы Get, при вызовах процедуры Put программа +осуществляет контроль за соответствием количества требуемых и выведенных +результирующих данных. Если программа выведет недостаточное или избыточное +количество результирующих данных, то после проверки этих данных появится +сообщение «Выведены не все результирующие данные» или, +соответственно, «Попытка вывести лишние результирующие данные».

              -

              +

              Вывод отладочной информации

              -

              4.9 Programming Taskbook. - - ( ).

              +

              Описываемые далее отладочные средства появились в версии 4.9 задачника Programming Taskbook. +С их помощью можно выводить отладочную информацию +непосредственно в окно задачника (в специальный раздел отладки).


              procedure Show(S: string);
              -

              S . +

              Отображает текстовую строку S в разделе отладки окна задачника.

              -

              , - S , - , - ( 80 ). - S - ; S - , S - , - S, — - , 80. +

              Если текущая экранная строка в разделе отладки уже содержит некоторый текст, то +строка S снабжается начальным пробелом и приписывается к этому тексту, +за исключением случая, когда при таком приписывании размер +полученного текста превысит ширину области данных (равную 80 символам). +В последнем случае вывод строки S осуществляется с начала +следующей экранной строки; если же и в этой ситуации строка S превысит +ширину области данных, то строка S будет выведена на нескольких +экранных строках, причем разрывы текста будут выполняться по +пробельным символам строки S, а при отсутствии пробелов — при +достижении очередного фрагмента строки длины, равной 80.

              -

              S - . - 13 (« »), 10 (« -»), - (#13#10). +

              Строка S может содержать явные команды перехода на новую +экранную строку. В качестве таких команд можно использовать или +символ с кодом 13 («возврат каретки»), или символ с кодом 10 («переход на новую +строку»), или их комбинацию в +указанном порядке (#13#10).

              @@ -363,36 +363,36 @@ procedure Show([S: string;] A: integer[; W: integer]);
              procedure Show([S: string;] A: real[; W: integer]);
              -

              Show, . - -, , - Pascal, - -. +

              Перегруженные варианты процедуры Show, предназначенные для вывода числовых отладочных данных. +Использование этих вариантов позволяет максимально упростить действия +учащегося, связанные с выводом числовых данных, поскольку избавляет +его от необходимости применять стандартные средства языка Pascal, +предназначенные для преобразования чисел в их строковые +представления.

              -

              , - . +

              При вызове приведенных вариантов можно не указывать один или оба параметра, +заключенные в квадратные скобки.

              -

              S , - ; S -, . +

              Строковый параметр S определяет необязательный комментарий, +который указывается перед выводимым числом; если параметр S +отсутствует, то комментарий полагается равным пустой строке.

              -

              A . +

              Числовой параметр A определяет выводимое число.

              -

              W - (. . -, ). W , - W ; ( , W ) - , - . , - (. . - ). - . +

              Необязательный целочисленный параметр W определяет +ширину поля вывода (т. е. количество экранных +позиций, отводимое для вывода числа). Если указанной ширины W поля вывода недостаточно, то +значение параметра W игнорируется; в этом случае (а также в случае, если параметр W отсутствует) +используется ширина поля вывода, минимально необходимая для +отображения данного числа. Если число не занимает всего поля вывода, то +оно дополняется слева пробелами (т. е. выравнивается по +правой границе поля вывода). В качестве десятичного разделителя +для чисел с дробной частью используется точка.

              -

              - . - - SetPrecision, . +

              Вещественные числа по умолчанию выводятся в формате с +фиксированной точкой и двумя дробными знаками. Изменить формат +вывода вещественных чисел можно с помощью вспомогательной +процедуры SetPrecision, описываемой далее.

              @@ -402,12 +402,12 @@ procedure ShowLine([S: string;] A: integer[; W: integer]);
              procedure ShowLine([S: string;] A: real[; W: integer]);
              -

              Show; - . - — , Show. -, , . - ShowLine , - . +

              Модификации ранее описанных процедур Show; после вывода указанных данных в раздел отладки +дополнительно осуществляют автоматический переход на следующую экранную строку. +Смысл параметров — тот же, что и для соответствующих вариантов процедуры Show. +Параметры, указанные в квадратных скобках, могут отсутствовать. +Если процедура ShowLine вызывается без параметров, то она +просто обеспечивает переход на новую экранную строку в разделе отладки.

              @@ -415,16 +415,16 @@
              procedure HideTask;
              -

              -, . - ( , - ), HideTask . - . +

              Вызов данной процедуры обеспечивает автоматическое скрытие всех разделов окна +задачника, кроме раздела отладки. Если раздел отладки в окне задачника +не отображается (в частности, если программа запущена в +демонстрационном режиме), то вызов процедуры HideTask игнорируется. +Игнорируются также все повторные вызовы данной процедуры.

              -

              / - - -. +

              Скрыть/восстановить основные разделы окна +задачника после его отображения на экране можно также с помощью клавиши +пробела или соответствующей команды контекстного меню раздела +отладки.

              @@ -435,36 +435,36 @@ procedure SetPrecision(N: integer); -

              - . N , - ; - . N -, - ( ); - - (. . W -Show ShowLine). N -, N = 0. +

              Процедура предназначена для настройки формата вывода +вещественных отладочных данных. Если параметр N положителен, то он +определяет количество выводимых дробных разрядов; при этом число +выводится в формате с фиксированной точкой. Если параметр N равен +нулю, то число выводится в формате с +плавающей точкой (экспоненциальном формате); при этом число +дробных знаков для экспоненциального формата +определяется шириной поля вывода (т. е. параметром W процедуры +Show или ShowLine). При отрицательных значениях параметра N выполняется та же +настройка, что и при N = 0.

              -

              , - SetPrecision, -. SetPrecision - -. +

              Действие текущей настройки числового формата, определенной +процедурой SetPrecision, продолжается до очередного вызова этой +процедуры. До первого вызова процедуры SetPrecision вещественные +числа выводятся в формате с фиксированной точкой и двумя дробными +знаками.

              -

              PT4Exam

              -

              ExamBegin ExamTaskC, , - PT4 PT4Exam. - Task, -. - - Pascal. PT4 PT4Exam , - -( ). +

              Особенности модуля PT4Exam

              +

              При выполнении заданий групп ExamBegin и ExamTaskC, связанных с ЕГЭ по информатике, +к программам вместо модуля PT4 подключается модуль PT4Exam. В этом модуле реализована единственная дополнительная +процедура Task, обеспечивающая инициализацию задания с указанным +именем. Все действия по вводу-выводу должны выполняться с использование стандартных +процедур языка Pascal. Отладочные средства модуля PT4 в модуле PT4Exam также недоступны, +однако имеется возможность выводить дополнительные данные можно непосредственно в раздел результатов +(хотя при этом решение будет считаться ошибочным).

              -

              PT4Exam - , ( : - PT4Exam Task, ). +

              Описанные выше ограничения модуля PT4Exam позволяют максимально приблизить полученное +решение к виду, требуемому на экзамене (программа содержит всего две дополнительные конструкции: +директиву подключения модуля PT4Exam и оператор вызова процедуры Task, инициализирующей требуемое задание).

              diff --git a/PABCNetHelp/ForEducation/PT4/Load.html b/PABCNetHelp/ForEducation/PT4/Load.html index 59ea99d5d..dfac292d7 100644 --- a/PABCNetHelp/ForEducation/PT4/Load.html +++ b/PABCNetHelp/ForEducation/PT4/Load.html @@ -10,30 +10,30 @@ -

              +

              Создание шаблона программы


              - Programming Taskbook PT4Load - - . - PascalABC.NET - « | » ( - - Shift+Ctrl+L).

              +Входящий в состав задачника Programming Taskbook программный модуль PT4Load позволяет быстро +создавать программы-заготовки для выполнения требуемого задания. Этот модуль можно +вызвать непосредственно из среды PascalABC.NET командой +меню «Модули | Создать шаблон программы» (с данной командой связана также +кнопка и клавиатурная +комбинация Shift+Ctrl+L).

              -

              , -( ).

              +

              При запуске данного модуля появляется окно, в котором требуется указать имя задания +(в нижней части окна отображаются имена всех имеющихся групп заданий).

              - - ( , , Begin1) - «» , ( Enter) - -, ( ). - - PascalABC.NET; , - .

              -

              , Begin3 ( Begin3.pas):

              +При вводе допустимого +имени задания (то есть имени группы и порядкового номера, например, Begin1) +кнопка «Загрузка» становится доступной, и после ее нажатия (или нажатия клавиши Enter) +в рабочем каталоге создается +файл, содержащий шаблон программы для выполнения выбранного задания (имя файла совпадает с именем задания). +Созданная программа-шаблон сразу загружается в редактор PascalABC.NET; ее можно немедленно запустить, чтобы +увидеть формулировку задания и пример исходных данных.

              +

              Приведем пример шаблона, созданного для задания Begin3 (этот шаблон будет записан в файл Begin3.pas):

              @@ -45,33 +45,33 @@ end.
              -

              : - (RB DM ), - - (, RBa1).

              +

              Ввод имени задания для исполнителей Робот и Чертежник имеет следующую особенность: для них надо вначале +ввести префикс исполнителя (RB для Робота или DM для Чертежника), +после чего ввести имя набора заданий +для соответствующего исполнителя и номер этого задания (например, RBa1).

              -

              , , - .

              +

              Если введено имя задания, для которого уже имеется файл с программой, то именно этот файл и будет +загружен в редактор.

              -

              PAS ( ) - .pas . - «» - pas-; . - , PAS « | ». +

              Особая группа PAS (последняя в списке групп заданий) позволяет загрузить в редактор +любой файл с расширением .pas из рабочего каталога. При вводе имени этой группы и нажатии +кнопки «Загрузка» появляется список +всех pas-файлов; после выбора любого из этих файлов он немедленно загружается в редактор. +Таким образом, использование группы PAS равносильно команде «Файл | Открыть». -

              4.11 . - . , «m» - , ; - «()»: +

              В версии 4.11 задачника появилась возможность фильтрации групп в процессе ввода их названий. +Фильтрация производится по уже введенным символам. Например, при вводе первого символа «m» в +списке возможных групп останутся только группы, имена которых начинаются с этого символа; при +этом перед списком отфильтрованных групп будет выведен текст «(фильтр)»:

              -

              , , - : +

              Как только в списке останется единственный вариант, будет выведена подсказка о том, что для +завершения ввода имени данной группы достаточно нажать пробел:

              @@ -79,7 +79,7 @@
              - : + После нажатия пробела произойдет автоматическое дополнение введенной части имени группы:
              diff --git a/PABCNetHelp/ForEducation/PT4/Results.html b/PABCNetHelp/ForEducation/PT4/Results.html index 5264c43dd..dd3cb12dc 100644 --- a/PABCNetHelp/ForEducation/PT4/Results.html +++ b/PABCNetHelp/ForEducation/PT4/Results.html @@ -10,74 +10,74 @@ -

              +

              Просмотр результатов


              - Programming Taskbook - results.abc, , - .

              +Результаты выполнения всех заданий из задачника Programming Taskbook +заносятся в специальный файл результатов results.abc, который должен находиться в том каталоге, из которого +запускаются программы с заданиями.

              -

              PascalABC.NET -( PABCWork.NET, C). -( -PT4Setup) - . +

              Данный файл автоматически создается в рабочем каталоге системы PascalABC.NET +(по умолчанию рабочим каталогом является каталог PABCWork.NET, находящийся на диске C). При смене рабочего каталога +(это можно сделать с помощью программы настройки задачника +PT4Setup) в новом рабочем каталоге +также создается файл результатов.

              - , -. PT4Results, - PascalABC.NET - « | » ( - - Shift+Ctrl+R).

              +Данные хранятся в файле результатов в зашифрованном виде, поэтому его непосредственный просмотр и корректировка +невозможны. Для просмотра содержимого файла результатов предназначен программный модуль PT4Results, +который вызывается непосредственно из среды PascalABC.NET командой +меню «Модули | Просмотреть результаты» (с данной командой связана также +кнопка и клавиатурная +комбинация Shift+Ctrl+R).

              -

              PT4Results -.

              -

              ; - - , , . : +

              При просмотре файла результатов с помощью модуля PT4Results содержащаяся в нем информация отображается в двух +вариантах.

              +

              Вариант с полной информацией представляет собой перечень всех запусков программ с учебными заданиями; +для каждого запуска указывается +имя задания, дата и время запуска, а также результат запуска. Например:

              -=      (C:\PABCWork)
              -Begin1 A27/09 19:07 .
              -Begin1 A27/09 19:07 .--2
              -Begin1 A27/09 19:07 !
              -For1   A27/09 19:07 .
              -For1   A27/09 19:08 .
              -For1   A27/09 19:10 .--3
              -For1   A27/09 19:13 !
              -For5   A27/09 19:15 .--2
              -For5   A27/09 19:16 .
              -For5   A27/09 19:19 !
              -For10  A27/09 19:21 .
              -For10  A27/09 19:22 .
              += Иванов Петр     (C:\PABCWork)
              +Begin1 A27/09 19:07 Выведены не все результирующие данные.
              +Begin1 A27/09 19:07 Ошибочное решение.--2
              +Begin1 A27/09 19:07 Задание выполнено!
              +For1   A27/09 19:07 Ознакомительный запуск.
              +For1   A27/09 19:08 Выведены не все результирующие данные.
              +For1   A27/09 19:10 Ошибочное решение.--3
              +For1   A27/09 19:13 Задание выполнено!
              +For5   A27/09 19:15 Неверно указан тип при вводе исходных данных.--2
              +For5   A27/09 19:16 Выведены не все результирующие данные.
              +For5   A27/09 19:19 Задание выполнено!
              +For10  A27/09 19:21 Неверно указан тип при вводе исходных данных.
              +For10  A27/09 19:22 Ошибочное решение.
              -

              A , PascalABC.NET, - , .

              -

              , - , . :

              +

              Буква A перед датой означает, что задание выполнялось в системе PascalABC.NET, а числа в конце +некоторых строк указывают на то, что было проведено подряд несколько запусков программы с одинаковым результатом.

              +

              Вариант со сводной информацией позволяет быстро узнать время выполнения заданий, количество +выполненных и незавершенных заданий, а также получить сводку о выполненных заданиях по каждой группе. Например:

              -=       (C:\PABCWork.NET)
              --1- :
              -27/09(19:07-19:22)[3/16]   : 0:16 [3/16]
              --2- :
              += Иванов Петр      (C:\PABCWork.NET)
              +-1- ВРЕМЯ ЗАНЯТИЙ:
              +27/09(19:07-19:22)[3/16]   ВСЕГО: 0:16 [3/16]
              +-2- ВЫПОЛНЕННЫЕ ЗАДАНИЯ:
              Begin1 A27/09 [4]      For1 A27/09 [6]     For5 A27/09 [4]
              --3- :
              +-3- НЕЗАВЕРШЕННЫЕ ЗАДАНИЯ:
              For10 27/09 [2]
              --5- :
              -Begin 1      For 2      : 3
              +-5- СВОДКА ПО ГРУППАМ ЗАДАНИЙ:
              +Begin 1      For 2      ВСЕГО: 3
              -

              PascalABC.NET - .

              +

              При использовании задачника в системе PascalABC.NET в файл результатов заносится также информация +о выполненных заданиях для исполнителей Робот и Чертежник.

              -

              4.11, PT4Results , - F2. +

              Начиная с версии 4.11, программный модуль PT4Results можно вызвать непосредственно из окна задачника, +нажав клавишу F2.

              diff --git a/PABCNetHelp/ForEducation/PT4/debug.html b/PABCNetHelp/ForEducation/PT4/debug.html index 3d221d66f..29529de53 100644 --- a/PABCNetHelp/ForEducation/PT4/debug.html +++ b/PABCNetHelp/ForEducation/PT4/debug.html @@ -8,182 +8,182 @@ -

              +

              Раздел отладки


              -

              4.9 Programming Taskbook , - - ( ). - , , - Programming Taskbook for MPI - - , - , , - . -, - -, . +

              В версии 4.9 задачника Programming Taskbook появились средства, +позволяющие выводить отладочную информацию непосредственно в окно +задачника (в специальный раздел отладки). Необходимость в +подобных дополнительных средствах возникает, прежде всего, +при работе с комплексом Programming Taskbook for MPI +при отладке +параллельных программ, поскольку для них нельзя использовать такие +стандартные средства отладки, как точки останова, пошаговое выполнение +программы и окна просмотра значений переменных. Следует также +отметить, что возможность вывода информации в раздел отладки +позволяет использовать задачник для написания и отладки параллельных +программ, не связанных с выполнением конкретных учебных заданий.

              -

              -, . - . +

              Отладочные средства задачника могут оказаться полезными и для +обычных, непараллельных программ. В этом случае их можно применять в +качестве дополнения к средствам встроенного отладчика.

              -

              - . - , - - : +

              Раздел отладки представляет собой одну или несколько +многострочных текстовых областей вывода. Он располагается под +основными разделами задачника и выводится на экран только в случае, +если в нем содержится какой-либо текст:

              -

              , - , , -. +

              При демонстрационном запуске программы все процедуры, связанные +с разделом отладки, игнорируются, поэтому раздел отладки на экране не +отображается.

              -

              , - ; . - - . / - - , . - , , -, HideTask. +

              Имеется возможность скрыть в окне задачника все его разделы, кроме +раздела отладки; для этого достаточно нажать клавишу пробела. +Повторное нажатие пробела восстанавливает в окне задачника ранее +скрытые разделы. Для скрытия/отображения основных разделов окна +задачника можно также использовать соответствующую команду +контекстного меню, связанного с разделом отладки. Скрыть все разделы +окна задачника, кроме раздела отладки, можно также программным +способом, вызвав процедуру HideTask.

              -

              - , -. - Alt+Up, Alt+Down ( ), -Alt+PgUp, Alt+PgDn ( 10 ), -Alt+Home, Alt+End ( - ). +

              Прокрутка содержимого раздела отладки может осуществляться с +помощью вертикальной полосы прокрутки, расположенной у его правой +границы. Можно также использовать колесико мыши и клавиатурные +комбинации Alt+Up, Alt+Down (прокрутка на одну экранную строку), +Alt+PgUp, Alt+PgDn (прокрутка на 10 экранных строк), +Alt+Home, Alt+End (прокрутка к первой или последней строке +области вывода).

              -

              , - . 7 14 - 1. - Alt+[+], — Alt+[–]. - -. - . +

              Предусмотрена возможность изменения размера шрифта, +используемого в разделе отладки. Шрифт может изменяться от 7 до 14 +пунктов с шагом 1. Для увеличения шрифта предназначена клавиатурная +комбинация Alt+[+], для уменьшения — комбинация Alt+[–]. +Соответствующие команды имеются также в контекстном меню раздела +отладки. Информация о текущем размере шрифта сохраняется в файле +результатов и учитывается при последующих запусках программы.

              -

              «» - . - - 1; - . , - , - : +

              Для «непараллельных» заданий раздел отладки содержит +единственную область вывода. Для заданий по параллельному +программированию число областей вывода равно числу параллельных +процессов плюс 1; при этом в каждый момент времени в разделе отладки +отображается одна из областей. Если областей вывода больше одной, то в +нижней части раздела отладки выводится набор ярлычков, позволяющих +переключиться на любую из имеющихся областей вывода:

              -

              ( 0 N–1, N — -) , - ; -«*» , - : +

              Ярлычки с номерами (от 0 до N–1, где N — количество +процессов) позволяют просмотреть содержимое области вывода, связанной +с процессом соответствующего ранга; ярлычок с символом +«*» позволяет просмотреть область вывода, содержащую +объединенный текст всех других областей:

              -

              - . , - - Alt+Right Alt+Left ( - ). - , : -«*» — [*], -«0»–«9» — -09, «10»–«35» -— A Z ( - - 36). +

              Для переключения на нужную область вывода достаточно щелкнуть +мышью на соответствующем ярлычке. Кроме того, для последовательного +перебора ярлычков слева направо или справа налево можно использовать +комбинации Alt+Right и Alt+Left соответственно (перебор +осуществляется циклически). Можно также сразу перейти к нужной +области вывода, нажав соответствующую клавишу: для области +«*» — клавишу [*], для областей +«0»–«9» — цифровые клавиши +09, а для областей «10»–«35» +— буквенные клавиши от A до Z (при выполнении +заданий по параллельному программированию максимально возможное +число процессов равно 36).

              -

              - , - Alt -Alt- . +

              Если в основных разделах окна задачника отсутствуют +прокручиваемые элементы или основные разделы являются скрытыми, то +дополнительную клавишу Alt в перечисленных выше клавиатурных +Alt-комбинациях можно не использовать.

              -

              , - , - - , -, - - . - , , - . +

              Отладочная информация, получаемая из +подчиненных процессов параллельной программы, предварительно +сохраняется в специальных +временных файлах в каталоге учащегося, поэтому она будет доступна для +просмотра, даже если на каком-либо этапе выполнения +программы произойдет зависание некоторых ее подчиненных процессов. +Отладочная информация, получаемая из главного процесса, выводится +непосредственно в раздел отладки.

              -

              - 999; - , 999, - , - . - , , , -«» - - . +

              Количество отладочных строк для каждого процесса не должно +превышать 999; если некоторый процесс пытается вывести данные в +строку с номером, превышающим 999, то в связанной с этим процессом +области отладки выводится сообщение об ошибке, и последующий вывод +отладочных данных для этого процесса блокируется. Указанное +ограничение позволяет, в частности, избежать проблем, возникающих при +«бесконечном» выводе отладочной информации из какого-либо +зациклившегося подчиненного процесса во временный файл.

              -

              , , - . 6  - «» 9  . - 80 . +

              Каждая экранная строка, отображаемая в разделе отладки, состоит из +служебной области и области данных. Ширина служебной области равна 6 экранным позициям +для «непараллельных» заданий и 9 позициям для заданий по параллельному программированию. Ширина +области данных равна 80 позициям.

              -

              (. , - ): +

              Служебная область состоит из следующих частей (см. рисунки, +приведенные выше):

              -
              • ( - ): 2 , - , «|»; -
              • : 3 , - , -«>» ; -
              • : -, ( - ), «!» -( ). +
                • область нумерации процессов (только для заданий по +параллельному программированию): 2 экранные позиции, +отводимые для ранга процесса, и символ «|»; +
                • область нумерации строк: 3 экранные позиции, отводимые +для номера строки данных, после которых следует символ +«>» и символ пробела; +
                • область признака сообщения об ошибке: одна экранная +позиция, в которой может содержаться либо пробел (признак +обычного отладочного текста), либо символ «!» +(признак сообщения об ошибке).
                -

                , - ( -«*»), -. +

                Если в разделе отладки выводится текст, связанный со всеми +процессами параллельного приложения (этот текст связан с ярлычком +«*»), то нумерация строк для каждого процесса производится +независимо.

                -

                , - , - ( , - ; - , ). - ( ) - . +

                При переключении между областями вывода, связанными с +различными процессами параллельного приложения, сохраняется номер +первой отображаемой строки (за исключением ситуации, когда в новой +области вывода отсутствует строка с требуемым номером; в этом случае в +новой области вывод осуществляется, начиная с первой строки данных). +Отмеченная особенность позволяет быстро просмотреть (и сравнить) один +и тот же фрагмент отладочных данных для различных процессов.

                -

                , , - Windows; - Ctrl+C - . +

                Содержимое области вывода, отображаемой в разделе отладки, можно +копировать в буфер Windows; для этого предназначена стандартная +клавиатурная комбинация Ctrl+C и соответствующая команда +контекстного меню раздела отладки.

                -

                Show ShowLine. - - , PT4. +

                Для вывода данных в раздел отладки предназначены процедуры Show и ShowLine. +Описания этих процедур приводятся +в разделе, посвященном типам и процедурам модуля PT4.

                -

                4.11 - . , - , - . - , - , , - Windows, . +

                Возможность использования раздела отладки сохранена и в появившемся в версии 4.11 +режиме окна с динамической компоновкой. Как и в окне с фиксированной компоновкой, +раздел отладки отображается ниже разделов с заданием, однако в данном случае +для всех разделов окна используется общая полоса прокрутки. В окне с динамической +компоновкой доступны почти все описанные выше действия по управлению разделом отладки, +в частности, настройка размера шрифта в разделе отладки, копирование содержимого раздела отладки +в буфер Windows, скрытие разделов окна с заданием.

                @@ -191,12 +191,12 @@
                -

                - , : - , - . - , - F4. +

                В режиме с динамической компоновкой отсутствует возможность +просмотра областей вывода, связанных с отдельными процессами параллельной программы: +раздел отладки всегда содержит объединенный текст, полученный +из всех областей. Для просмотра содержимого отдельных областей вывода +следует переключиться в режим окна с фиксированной компоновкой, нажав +клавишу F4.

                diff --git a/PABCNetHelp/ForEducation/PT4/window.html b/PABCNetHelp/ForEducation/PT4/window.html index 61fe7ca35..018c317fb 100644 --- a/PABCNetHelp/ForEducation/PT4/window.html +++ b/PABCNetHelp/ForEducation/PT4/window.html @@ -2,7 +2,7 @@ - + @@ -11,207 +11,207 @@ -

                +

                Окно задачника


                -

                4.11, , - 5 , - , - , «» - . -, , - . - -, , 4.11, - . +

                Начиная с версии 4.11, наряду с традиционным режимом с фиксированной компоновкой, +в котором для каждого раздела окна выделяется область из 5 экранных строк, +можно использовать новый режим с динамической компоновкой, в котором размеры +разделов определяются их фактическим содержимым, а размеры окна задачника «подстраиваются» +под размеры разделов. Режим с динамической компоновкой более удобен при выполнении +заданий, содержащих большие наборы исходных и результирующих данных, а также имеющих +большие формулировки. +В данном разделе вначале дается общее описание окна задачника на примере режима с фиксированной +компоновкой, затем описываются дополнения, реализованные в версии 4.11, +после чего приводится описание режима с динамической компоновкой.

                -

                +

                Общее описание

                -

                , Programming -Taskbook, . - , -, . - - Begin3 PascalABC.NET ( - ). +

                При запуске программы, использующей электронный задачник Programming +Taskbook, на экране возникает окно задачника. +В зависимости от текущей настройки, окно может отображаться либо в режиме с фиксированной +компоновкой, либо в режиме с динамической компоновкой. +Приведем вид этого окна +для задания Begin3 в случае использования системы программирования PascalABC.NET (имя +используемого языка программирования указывается в заголовке окна).

                -

                : +

                Режим с фиксированной компоновкой:

                -

                : +

                Режим с динамической компоновкой:

                -

                , F4 - « (F4)», . +

                Переключаться между режимами окна можно, нажимая клавишу F4 или щелкая мышью +на кнопке быстрого доступа «Режим (F4)», расположенной в правом верхнем углу окна.

                -

                , - . , - 4.11, - . +

                В данном пункте мы опишем основные компоненты окна задачника, используя в качестве +образца окно с фиксированной компоновкой. Дополнительные возможности, +появившиеся в версии 4.11, а также особенности режима с динамической компоновкой +будут описаны в последующих пунктах.

                -

                , - (« , -»), , , - , -( ). - «°», , -, - . - . +

                В верхней части окна выводится информация о теме, к которой относится +выполняемое задание («ВВОД И ВЫВОД ДАННЫХ, ОПЕРАТОР +ПРИСВАИВАНИЯ»), название задания, сведения об учащемся, дата и время +запуска программы и кнопки быстрого доступа, связанные с некоторыми командами +(кнопки располагаются в правом верхнем углу окна). +Символ «°», указанный после названия задания, +означает, что данное задание можно выполнять в мини-варианте задачника. Затем +следует раздел с формулировкой задания.

                -

                . Begin3 - a b, . - ; -«a =» «b =», a b. +

                Далее располагается раздел с исходными данными. В случае задания Begin3 это +вещественные числа a и b, определяющие длины сторон прямоугольника. При +необходимости данные могут снабжаться комментариями; в нашем случае это строки +«a =» и «b =», расположенные перед числами a и b.

                -

                , - : « » -« ». - - , -« » (. . -«») . - S P, -. - Ctrl+Tab. - - ; , - (, - ). +

                Последним разделом в окне с фиксированной компоновкой является раздел контрольных данных и результатов, +содержащий две вкладки: «Пример верного решения» и +«Полученные результаты». Если в программе не выполняются действия +по вводу-выводу данных, то при запуске программы активной становится вкладка +«Пример верного решения» с контрольными (т. е. +«правильными») результирующими данными. В нашем случае в ней +отображаются правильные значения площади S и периметра P, снабженные +комментариями. Для переключения между вкладками достаточно щелкнуть мышью +на ярлычке нужной вкладки или ввести клавиатурную комбинацию Ctrl+Tab. +В режиме с динамической компоновкой разделы с результатами и с контрольными +данными отображаются одновременно; кроме того, в некоторых ситуациях +один из этих разделов может отсутствовать (например, при ознакомительном запуске +отсутствует раздел с результатами).

                -

                ( , ), - : - , - — . , -. +

                Чтобы отличить комментарии от данных (как исходных, так и результирующих), +используется цветовое выделение: комментарии выводятся светло-серым цветом, +данные — желтым. Контрольные данные отображаются тем же цветом, что и +комментарии.

                -

                -«». -«», Esc , - ( PascalABC.NET F9). , - - F9. +

                В нижней части окна располагается информационная панель и кнопка +«Выход». Для выхода из программы надо нажать кнопку +«Выход», клавишу Esc или ту клавишу, которая используется для +запуска программы (для среды PascalABC.NET это клавиша F9). Таким образом, для +проверки программы на нескольких наборах исходных данных достаточно несколько +раз нажать клавишу F9.

                -

                - 5 , - , , - - , - . , - , -. +

                Если формулировка задания или раздел с исходными или результирующими данными +содержит более 5 строк, а также при наличии +в задании исходных или результирующих данных, допускающих прокрутку, в окне +с фиксированной компоновкой появляются +дополнительные управляющие элементы, обеспечивающие прокрутку +соответствующих компонентов задания. Ниже приводится пример окна, +содержащего четыре набора файловых данных, каждый из которых допускает +прокрутку.

                -

                - , -( - ). +

                В окне с динамической компоновкой формулировка задания и все данные +отображаются полностью, поэтому для большинства заданий прокрутка не требуется +(при необходимости окно с динамической компоновкой допускает общую прокрутку +своего содержимого).

                -

                , - ( ) (- ). +

                Элементы файлов отображаются бирюзовым цветом, чтобы подчеркнуть их +отличие от обычных исходных данных (желтого цвета) и комментариев (светло-серого цвета).

                -

                - , . - -«» . - Right Down ( ) Left Up -( ); «» , - «» , , - Ctrl+Right PgDn ( ) Ctrl+Left - PgUp ( ). , Home - , End — . +

                Для прокрутки содержимого файла с помощью мыши достаточно щелкнуть на +одной из двух кнопок , расположенных справа от требуемой экранной строки. С +помощью клавиатуры можно выполнять поэлементную или +«постраничную» прокрутку. Для поэлементной прокрутки используются +клавиши со стрелками Right или Down (прокрутка вперед) и Left или Up +(прокрутка назад); для «постраничной» прокрутки, обеспечивающей +переход к новой «порции» элементов, умещающейся на экранной строке, +используются клавиши Ctrl+Right или PgDn (прокрутка вперед) и Ctrl+Left +или PgUp (прокрутка назад). Кроме того, клавиша Home обеспечивает +перемещение на начало, а клавиша End — на конец файла.

                -

                4.11, : -; . +

                Начиная с версии 4.11, доступен еще один способ прокрутки: с помощью колесика +мыши; при этом курсор мыши достаточно расположить в области прокручиваемого элемента.

                -

                , -(, — . , ), - , - . - [+] [–]: - , , -, — . +

                Если окно программы содержит несколько элементов, допускающих прокрутку +(например, несколько строк с файловыми данными — см. рисунок, приведенный выше), то прокрутка +с помощью клавиатуры выполняется для выделенного элемента, помеченного в левой +части окна задачника маркером в виде черного кружка. Для смены выделенного элемента предусмотрены +клавиши [+] и [–]: первая из них обеспечивает циклический перебор всех +отображенных на экране элементов, допускающих прокрутку, в направлении сверху +вниз, а вторая — в направлении снизу вверх.

                -

                , - , , - , . - . - . +

                Для того чтобы определить, какие элементы файла отображаются в данный +момент на экране, предусмотрен указатель текущей позиции, значение которого +равно номеру первого из элементов, отображенных на экране. Данный указатель +располагается в начале строки с элементами файла и отделяется от них двоеточием. +Нумерация элементов файла начинается с единицы.

                -

                , - , ( -) , - ( , , , - ). - ( -, , ); - , - . -, ( -, - , - Up, Down PgUp, PgDn, - , , -Left, Right Ctrl-). - ( , - ). +

                В отличие от двоичных файлов, содержимое которых всегда отображается на +одной экранной строке, текстовые файлы отображаются на нескольких (от двух до +пяти) экранных строках, причем на каждой экранной строке размещается одна строка +из текстового файла (это связано с тем, что строки, входящие в текстовый файл, +могут иметь большую длину). Указатель текущей позиции в данном +случае содержит номер первой отображаемой на экране файловой строки (нумерация +строк, как и элементов двоичных файлов, ведется от единицы); этот указатель +размещается в начале первой из экранных строк, отведенных для отображения +текстового файла. Прокрутка строк текстового файла обеспечивается теми же +клавишами, что и прокрутка элементов типизированного файла (в данном +случае, поскольку элементы-строки расположены по вертикали, более естественно +использовать клавиши Up, Down и PgUp, PgDn, в то время как для элементов +двоичных файлов, расположенных по горизонтали, удобнее пользоваться клавишами +Left, Right и их Ctrl-комбинациями). Текстовые файлы снабжаются +вертикальными полосами прокрутки (вместо горизонтально расположенных парных кнопок, которыми снабжаются +двоичные файлы).

                -

                , - , - . - . , -, . - - , . - , - ( ). - , . +

                Прокручивать можно не только элементы данных, но и текст с +формулировкой задания, если он не умещается в выделенных для этих целей пяти +экранных строках. Действия по прокрутке текста задания аналогичны +действиям по прокрутке текстовых файлов. Для текста задания, допускающего +прокрутку, также предусмотрен указатель текущей позиции. Этот указатель +размещается слева от раздела с формулировкой задания и содержит номер первой из +тех строк текста, которые в данный момент отображаются на экране. Если в +результате прокрутки на экране выведены последние строки формулировки задания, +то указатель текущей позиции подчеркивается (как на приведенном ниже рисунке). +Это означает, что дальнейшая прокрутка вниз невозможна.

                -

                - : . - Dynamic (« »). , - , - . +

                В приведенном ниже окне присутствуют также особые элементы исходных и +результирующих данных: цепочки узлов. Эти элементы используются в заданиях +группы Dynamic («Динамические структуры данных»). Особенности, +связанные с отображением цепочек узлов, описываются в примерах выполнения +заданий на обработку динамических структур.

                -

                - : ; - - Tree. - - , , -. +

                Имеется еще один особый вид +исходных и результирующих данных: бинарные деревья; данные этого вида описываются в +примерах +выполнения заданий группы Tree. +Если глубина бинарного дерева превышает количество +экранных строк, отведенных для его отображения, то для данного дерева также доступна +прокрутка.

                -

                , - , - - . -, , -« ». +

                Если программа запущена в демонстрационном режиме, то +на месте информационной панели отображаются дополнительные кнопки, +позволяющие быстро перейти к предыдущему или следующему заданию данной +группы или просмотреть новый набор исходных и контрольных данных. При +демонстрационном, как и при ознакомительном запуске, активной является вкладка +«Пример верного решения».

                -

                4.9 , - , - . - - , PT4. +

                В версии 4.9 окно задачника было дополнено разделом отладки, +который отображается на экране, +если программа учащегося при выполнении задания выводит отладочную информацию. +Предусмотренные в задачнике отладочные процедуры подробно описываются +в разделе, посвященном типам и процедурам модуля PT4.

                -

                , F1 -( «?» ) - . 4.9, : +

                Если окно задачника является активным, то нажатие клавиши F1 +(или кнопки «?» в правой части заголовка окна) +приводит к отображению на экране информационного окна. Начиная с версии 4.9, данное окно содержит набор вкладок:

                @@ -219,21 +219,21 @@ Taskbook, -

                , 4.11 +

                Дополнения, реализованные в версии 4.11

                -

                4.11 . - , -( , ). +

                В версии 4.11 интерфейс окна задачника был дополнен рядом новых возможностей. +В данном пункте описываются те из них, которые реализованы для любого режима окна +(как с фиксированной, так и с динамической компоновкой).

                -

                +

                Расширенное цветовое выделение ошибок

                -

                , , - - , -. +

                Наряду со стандартным красным цветом, свидетельствующим об ошибочном решении, +для фона информационной панели используются +три дополнительных оттенка красного цвета, которые связываются с тремя видами ошибок ввода-вывода.

                -

                1. ( ): +

                1. Введено или выведено недостаточно данных (оранжевый фон):

                @@ -241,71 +241,71 @@ Taskbook, -

                2. ( ): +

                2. Попытка ввести или вывести лишние данные (малиновый фон):

                -

                3. ( ): +

                3. Попытка ввести или вывести данные неверного типа (фиолетовый фон):

                -

                4. ( ): +

                4. Прочие ошибки (красный фон):

                -

                - - +

                Индикаторы ввода-вывода +и прогресса выполнения задания

                -

                - - -( - -. ). - - -( ). - - ; / - . - / , -, «: 2 5» «: 4 8». +

                В левой и правой части раздела исходных данных и раздела результатов +окна с фиксированной компоновкой выделено место для +отображения дополнительных индикаторов в виде вертикальных цветовых полос +(аналогичные индикаторы для окна с динамической компоновкой +являются горизонтальными и располагаются на специальной панели +индикаторовсм. следующий пункт). +Индикаторы в левой +части разделов показывают долю введенных и выведенных данных +(по отношению к общему количеству исходных и результирующих данных). +При вводе и выводе всех требуемых +данных полоса соответствующего индикатора занимает весь раздел по вертикали; при вводе/выводе +части данных высота полосы соответствует размеру этой части. При наведении мыши на индикатор во +всплывающей подсказке отображается точная информация о числе введенных/выведенных данных, +например, «Ввод: 2 из 5» или «Вывод: 4 из 8».

                -

                - . +

                Индикаторы имеют темно-серый цвет.

                -

                , - , - - . . - , - , , - . , , , - ( - , ). +

                В случае, когда в задании не требуется пересылать данные непосредственно задачнику или не +требуется получать от него исходные данные, индикаторы всегда занимают весь раздел по вертикали +и при этом имеют светло-серый цвет. Для индикаторов такого типа подсказка не выводится. +Примерами заданий, в которых не требуется +пересылать данные задачнику, являются многие задания на преобразование файлов и деревьев и все задания, +связанные с ЕГЭ. Задания, связанные с ЕГЭ, являются также примерами заданий, в которых не требуется +получать исходные данные от задачника (данные должны +считываться из входного файла, который связывается со стандартным потоком ввода).

                -

                - - . , , - , , , — - . ; - ( ). - ( , , - ), , ( - ) . - - , - . +

                В правой части разделов с входными и выходными данными могут отображаться индикаторы +ошибок ввода-вывода и прогресса выполнения задания. Индикатор ошибки, связанной с вводом, +размещается в правой части раздела входных данных, а индикатор ошибки, связанной с выводом, — в правой +части раздела выходных данных. Он всегда занимает весь раздел по вертикали; его цвет +соответствует типу ошибки (этот же цвет используется и для фона информационной панели). В то время как +цвет определяет характер ошибки (недостаточно данных, избыточное число данных, +данные неверного типа), расположение индикатора показывает, к какой категории данных (входных +или выходных) эта ошибка относится. +С индикаторами ошибок ввода-вывода не связываются подсказки, так как +подробные сведения об обнаруженной ошибке выводятся на информационной панели.

                @@ -313,295 +313,295 @@ Taskbook,
                -

                - . . - . - . -, - : ( ) , - , ( ) , - . - «:», - , , - . +

                В правой части разделов с входными и выходными данными отображается также индикатор +прогресса выполнения задания. Он имеет зеленый цвет и связывается с обоими разделами. Высота +индикатора прогресса зависит от количества успешных тестовых испытаний программы. В случае +выполнения требуемого числа испытаний этот индикатор заполняет по высоте оба раздела. Таким +образом, при успешном выполнении задания разделы исходных и результирующих данных полностью +обрамляются и слева и справа: обрамление слева (серого цвета) означает, что были введены и +выведены все требуемые данные, обрамление справа (зеленого цвета) означает, что были успешно +пройдены все тестовые испытания. +В подсказке к индикатору прогресса выводится текст «Тесты:», после которого +указывается число успешно пройденных тестов и число тестов, которые необходимо пройти для того, чтобы +задание было зачтено как выполненное.

                -

                ( -). +

                Ниже приведен вид окна задачника при успешном выполнении второго теста (из трех +требуемых).

                -

                - - , . - - , - (, , ) , . +

                При выполнении заданий по параллельному программированию индикаторы ввода-вывода +отображают общее число данных, введенных и выведенных всеми процессами. В этом случае +подсказки к индикаторам ввода-вывода дополнительно содержат информацию о том, сколько данных +было введено (или, соответственно, выведено) каждым из процессов, использованных в задании.

                -

                , / +

                Изменение режима окна, цветовой схемы и отключение отображения даты/времени

                -

                F4 «», -, : . - 4.11, . +

                Клавиша F4 и кнопка быстрого доступа «Режим», размещенная в правой верхней части окна +задачника, позволяют переключаться между двумя режимами окна: с фиксированной и динамической компоновкой. +Режим с динамической компоновкой появился в версии 4.11, он подробно описывается в следующем пункте.

                -

                F3 «», - , : -( : ) 4.11 ( ). - - , «» , -, «» . «» ( - ) (); . +

                Клавиша F3 и кнопка быстрого доступа «Цвет», размещенная рядом с кнопкой переключения +режима окна, позволяют переключаться между двумя цветовыми схемами окна задачника: традиционной +(в стиле консольного окна: светлые символы на черном фоне) и появившейся в версии 4.11 (темные символы на белом фоне). +Элементы исходных и +результирующих данных, которые в традиционной «черной» схеме отображаются желтым цветом, в +новой, «белой» схеме отображаются синим цветом. Цвет «внешних» данных (элементов файлов и +динамических структур) в обеих схемах является одинаковым (бирюзовым); изменяется лишь его яркость.

                -

                , - . +

                Цвета индикаторов подобраны таким образом, чтобы нормально восприниматься в любой +цветовой схеме.

                -

                «» -«» ; «» - . +

                «Белая» схема является менее контрастной и поэтому проигрывает в наглядности по сравнению с +«черной» схемой; в то же время «белая» схема позволяет создавать более наглядные скриншоты окон +задачника в печатных пособиях.

                -

                , , - / , - Ctrl+D ( ). - , , , , - . / - / - , , -. +

                Еще одной возможностью, связанной исключительно с удобством оформления учебных материалов, +является скрытие даты/времени в верхней левой части окна задачника, которое может +выполняться при нажатии комбинации Ctrl+D (клавиша работает как переключатель). +Эта возможность предназначена, в основном, для преподавателя, готовящего презентации или пособия, +связанные с задачником. Скрытие даты/времени +позволяет не следить за согласованием даты/времени при подготовке серии скриншотов с +окнами задачника и, кроме того, дает возможность скрыть информацию о дате и времени подготовки +скриншотов.

                -

                / - . +

                В режиме с динамической компоновкой для скрытия/отображения +даты и времени можно также использовать соответствующую команду контекстного меню окна задачника.

                -

                ( , /) - pt4.ini - . +

                Все описанные настройки (выбранный режим окна, цветовая схема и режим отключения даты/времени) +запоминаются в файле настроек pt4.ini в текущем каталоге и при последующих запусках программ с заданиями +восстанавливаются автоматически.

                -

                +

                Быстрый просмотр результатов

                -

                PT4Results -«» F2. - - ( PT4Demo -, , -- ). PT4Results; - «» . +

                Для вызова программного модуля PT4Results предусмотрена кнопка быстрого доступа +«Результаты» в правой верхней части окна задачника и связанная с ней клавиша F2. В демо-режиме +эта возможность отключена (поскольку модуль PT4Demo может быть запущен не из рабочего +каталога, а из системного каталога задачника, с которым не связывается информация о результатах +какого-либо учащегося). Запустить можно лишь одну копию модуля PT4Results; на время работы с +этим модулем кнопка «Результаты» делается недоступной.

                -

                +

                Режим с динамической компоновкой

                -

                +

                Особенности режима с динамической компоновкой

                -

                , «» - F4 : - , - , (5 ) - , 4.11 -( - -ProgrammingABC.NET WDE), , - , , , -. +

                Как было отмечено выше, с помощью кнопки быстрого доступа «Режим» +и связанной с ней клавиши F4 можно осуществлять переключение между двумя режимами окна задачника: +традиционного режима с фиксированной компоновкой, в котором +разделы с формулировкой, исходными данными и результатами имеют фиксированный размер (5 экранных строк) и +допускают независимую прокрутку, и появившегося в версии 4.11 режима с динамической компоновкой +(в стиле окна задачника для веб-среды +ProgrammingABC.NET WDE), в котором размеры разделов определяются содержащимися в них данными, состав разделов зависит от +результата тестового запуска, и для всего содержимого окна выполняется, при необходимости, общая +прокрутка.

                -

                , pt4.ini, - . 4.11, - . +

                Подобно цветовой схеме и другим настройкам окна, выбранный вариант режима запоминается в файле pt4.ini, и при +последующих запусках программ автоматически восстанавливается. Начиная с версии 4.11, в качестве +режима по умолчанию установлен режим с динамической компоновкой.

                -

                - , ( - ) . +

                В режиме с динамической компоновкой управляющие элементы и информационная панель располагаются в верхней +части окна, поскольку высота окна для различных заданий (и даже для различных запусков программы +с одним и тем же заданием) может изменяться.

                -

                : - ( ), - ( « »), ( -« ») ( - « »). - . - , () — . - , - . , - - . +

                Окно в режиме с динамической компоновкой может содержать от двух до четырех разделов в различных сочетаниях: +раздел формулировки (без заголовка), раздел +исходных данных (с заголовком «Исходные данные»), раздел с результатами (с заголовком +«Полученные результаты») и раздел с образцом правильного решения (с +заголовком «Пример верного решения»). Разделы с формулировкой и исходными данными отображаются +при любом варианте запуска. В демонстрационном режиме и при ознакомительном запуске раздел с образцом правильного +решения отображается, а (пустой) раздел с результатами — нет. В случае успешного тестового запуска +раздел с образцом правильного решения не отображается, так как образец в этом случае совпадает с +полученными результатами. Все четыре раздела отображаются в случае, когда при тестовом +испытании была выявлена какая-либо ошибка.

                -

                -(- ) , - . -, - . , - , . - , . - ; - : , , - , , , - . , - . , , - , . - , , - - : -, , . +

                В режиме с динамической компоновкой все индикаторы +(ввода-вывода и прогресса выполнения задания) вынесены на специальную панель индикаторов, размещенную под +информационной панелью. Панель индикаторов не отображается в демо-режиме, а также при +ознакомительном запуске. Помимо собственно индикаторов, которые в режиме с динамической компоновкой +располагаются горизонтально, на панели индикаторов размещаются дополнительные цветовые метки. Зеленая метка +появляется над индикатором прогресса выполнения задания в случае, когда успешно пройдены все требуемые тесты. Метки с +различными оттенками красного цвета отображаются при выявлении ошибок; их размещение зависит +от характера ошибки: если это ошибка ввода, то метка отображается над индикатором ввода, если это +ошибка вывода, то над индикатором вывода, если же это ошибка другого вида, то метка размещается +над индикатором прогресса выполнения. Таким образом, при наличии любой ошибки в разделе +индикаторов будет указана соответствующая метка. Поскольку, помимо индикаторов, панель +содержит поясняющий текст, дополнительные подсказки к индикаторам не требуются. Исключение +составляют задания по параллельному программированию, для которых предусмотрены подсказки, +связанные с индикаторами ввода-вывода и поясняющим текстом: подсказки содержат информацию о +том, сколько было введено или выведено данных в каждом процессе, использовавшемся в задании.

                -

                - , - , . +

                При обнаружении ошибки ввода-вывода заголовок соответствующего раздела выводится цветом, +соответствующим цвету этой ошибки, как на приведенном ниже рисунке.

                -

                -. Align31 ( -). +

                Режим с динамической компоновкой особенно удобен для заданий с большими формулировками и большими наборами +данных. В качестве примера приведем окно в данном режиме для задания Align31 (при демонстрационном +запуске).

                -

                - , . +

                В приведенном ниже окне с фиксированной компоновкой для этого же задания +требуется прокрутка как для формулировки, так и для раздела исходных данных.

                -

                , - , - . - , - ; . - Ctrl+Up Ctrl+Down -. +

                Если часть разделов с заданием не умещается на экране, то у правой границы окна +отображается полоса прокрутки, а нижняя граница окна автоматически подстраивается под размеры экрана и +располагается выше панели задач. При перемещении окна вверх в данной ситуации +высота окна автоматически увеличивается до тех пор, пока все его содержимое не будет отображаться +в окне; при этом полоса прокрутки опять будет скрыта. Для перемещения верхней +границы окна вверх и вниз можно использовать клавиатурные комбинации Ctrl+Up и Ctrl+Down +соответственно.

                -

                , - , - , Home, End, PgUp, PgDn, Up Down. +

                Если в режиме с динамической компоновкой отображается полоса прокрутки, +то прокручивать данные можно как с ее помощью, +так и с помощью колесика мыши, а также клавишами Home, End, PgUp, PgDn, Up и Down.

                -

                ( ) - , - ( , , ). - Ctrl+[+] Ctrl+[–]. - ( 8 ). - ( Alt+[+] Alt+[–]); - . +

                Окно в режиме с динамической компоновкой (в отличие от окна в режиме с фиксированной компоновкой) +можно масштабировать, изменяя +размер шрифта в его основных разделах (с формулировкой задания, исходными данными, результатами и примером правильного решения). Для масштабирования можно использовать команды +контекстного меню или клавиши Ctrl+[+] и Ctrl+[–]. Ниже приведен вид окна с минимальным размером +шрифта (равным 8 пунктам). В режиме с динамической компоновкой сохраняется возможность изменения шрифта +в разделе отладки (с помощью команд контекстного меню или клавиш Alt+[+] и Alt+[–]); подобное изменение +не влияет на размеры окна.

                -

                - - pt4.ini . - , -. ( - ) - , -. +

                Текущая позиция верхней границы окна в режиме с динамической компоновкой +и текущие размеры шрифта сохраняются в +файле настроек pt4.ini и при последующем запуске автоматически восстанавливаются. Однако это +сохранение производится только в случае, если при закрытии окна оно находилось в режиме с динамической +компоновкой. В противном случае (если при запуске программы окно отображается в режиме +с фиксированной компоновкой) для позиции верхней +границы окна и размера шрифта в основных разделах устанавливаются стандартные значения, принятые для режима с фиксированной +компоновкой.

                -

                +

                Дополнительная настройка разделов с заданием

                -

                , - . - - Del. - , -() , , - ( « - (Del)»): +

                В режиме с динамической компоновкой можно скрыть формулировку задания, +чтобы обеспечить отображение других элементов задания в окне меньшей высоты. Для скрытия формулировки +задания достаточно щелкнуть мышью в любом месте раздела с формулировкой задания +или нажать клавишу Del. +Если формулировка задания скрыта, то раздел с формулировкой уменьшается до одной +(пустой) экранной строки, причем в правой части этого раздела отображается кнопка, позволяющая +вновь отобразить формулировку задания (с данной кнопкой связана всплывающая подсказка «Показать +формулировку задания (Del)»):

                -

                , , - , : - Del. +

                Для восстановления формулировки, помимо нажатия на кнопку, доступны +те же действия, которые обеспечивают ее скрытие: щелчок в любом месте раздела с формулировкой +и нажатие клавиши Del.

                -

                , , - , , ( ). - : -, ( ). - «x», -« (Del)»: +

                Как правило, необходимость в скрытии формулировки задания возникает в ситуации, когда +часть данных, связанных с заданием, не отображается на экране (при этом окно снабжается полосой прокрутки). +В подобной ситуации предусмотрен еще один способ скрытия раздела с формулировкой: с помощью +кнопки, отображаемой в правом верхнем углу этого раздела (рядом с полосой прокрутки). +На кнопке отображается символ «x», и с ней связывается всплывающая подсказка +«Скрыть формулировку задания (Del)»:

                -

                ( -) , ( - -) . - - ; , - - -( « »). +

                Если закрыть окно (не в демо-режиме) при скрытой формулировке, то при последующем запуске (также не +в демо-режиме) формулировка останется скрытой. +При начальном отображении каждого задания в демо-режиме формулировка всегда выводится; если ее скрыть, +то она будет оставаться скрытой +при последующих просмотрах других вариантов исходных и контрольных данных для этого задания +(варианты перебираются кнопкой «Новые данные»).

                -

                (, -, , , 5 ) - . - . - , ; - - , 1. , - : +

                В режиме с динамической компоновкой все прокручиваемые элементы данных (формулировка, элементы двоичных +файлов, элементы бинарных деревьев, разделы исходных и результирующих данных, содержащие более 5 строк) +отображаются полностью. Частично отображаются только элементы +текстовых файлов. +По умолчанию выводится столько же строк текстового файла, сколько и в режиме с фиксированной компоновкой; +при этом первая строка файла +снабжается номером, равным 1. Такой подход позволяет ознакомиться с заданием, отобразив его в окне +сравнительно небольшого размера:

                -

                - , - , . - « (Ins)». - , Ins - , ( ), - ; , - : , , , : +

                Если в режиме с динамической компоновкой +отображается только часть данных из текстовых файлов, то в правом верхнем углу +раздела с исходными данными появляется кнопка со стилизованной стрелкой, направленной вниз. С ней связывается +подсказка «Развернуть содержимое текстовых файлов (Ins)». +Щелкнув на этой кнопке, нажав клавишу Ins или +выполнив щелчок мышью на одном из разделов, связанных с заданием (кроме раздела с формулировкой), +можно отобразить файловые данные в полном объеме; при этом около каждой файловой строки появится ее номер, а на +кнопке изменится изображение: вместо стрелки, направленной вниз, будет изображена стрелка, направленная вверх:

                -

                - , - , . +

                Режим полного отображения текстовых файлов удобен для +более тщательного изучения особенностей исходных и полученных файлов, а также +для сравнения полученного ошибочного файла с файлом, указанным в примере правильного решения.

                -

                ( -) -, ( -) -. - - ; , - - -( « »). +

                Если закрыть окно задачника (не в демо-режиме) при развернутом содержимом текстовых +файлов, то при последующем запуске (также не в демо-режиме) это содержимое будет развернуто +автоматически. При начальном отображении каждого задания в демо-режиме данные +текстовых файлов всегда выводятся в свернутом виде; если их развернуть, +то режим развернутого отображения будет сохраняться +при последующих просмотрах других вариантов исходных и контрольных данных для этого задания +(варианты перебираются кнопкой «Новые данные»).

                -

                / - , . - , - -Ins . - - , , , - . +

                Действия по разворачиванию/сворачиванию содержимого текстовых файлов можно выполнять и для +файлов небольшого размера, когда даже в свернутом режиме на экране отображаются все файловые строки. +Однако в этом случае кнопка со стрелкой в окне задачника не появляется, и для переключения между +режимами свернутого и развернутого отображения файловых данных следует нажимать клавишу +Ins или выполнять щелчок мышью на разделе с заданием. +Перейти в режим развернутого отображения содержимого для небольших +файлов может потребоваться, например, для того, +чтобы этот режим автоматически восстановился при следующем тестовом запуске программы.

                -

                «» +

                «Интеллектуальная» прокрутка

                -

                , , -(, ), - - . , - . , - «» . , - ( , , ) - , . , - , - «–», «+» «/»: +

                В ситуации, когда разделы с исходными, результирующими или контрольными данными имеют большую высоту +(например, при отображении в полном объеме содержимого текстовых файлов), +с помощью стандартной прокрутки сложно обеспечить быстрый переход к началу +требуемого раздела. Кроме того, при большом объеме результирующих данных затрудняется их сравнение +с контрольными данными. Чтобы решить эти проблемы, в режиме с динамической компоновкой реализована +возможность «интеллектуальной» прокрутки. Данная возможность доступна, если +основные разделы окна (разделы с формулировкой, исходными данными, результатами и примером правильного решения) +имеют суммарную высоту, превышающую размер окна. При этом в левом верхнем углу области окна, +отводимой для отображения разделов задания, отображаются +три дополнительные кнопки с символами «–», «+» и «/»:

                @@ -609,34 +609,34 @@ ProgrammingABC.NET WDE),
                -

                . - «–» [–] - , - «+» [+] - ; . - , . +

                Прокрутка содержимого окна не влияет на положение этих кнопок. +Нажатие на кнопку «–» или нажатие клавиши [–] +обеспечивает прокрутку к началу предыдущего раздела задания, +нажатие на кнопку «+» или нажатие клавиши [+] +обеспечивает прокрутку к началу следующего раздела задания; при этом перебор разделов выполняется циклически. +Если раздел с формулировкой является скрытым, то он при переборе разделов не учитывается.

                -

                «/» [/] - , . - , - . : - , . - -. +

                Нажатие на кнопку «/» или нажатие клавиши [/] обеспечивает переход к началу раздела с результатами +или раздела с примером правильного решения, если в окне присутствует только один из этих разделов. Если же +окно содержит оба этих раздела, то данная кнопка и связанная с ней клавиша обеспечивают в дальнейшем переключение +между этими разделами. При этом выполняется дополнительная синхронизация разделов: +новый раздел отображается с той строки, которая соответствует верхней отображаемой строке прежнего раздела. +Подобная синхронизация в еще большей степени упрощает сравнение полученных и правильных +результатов.

                -

                [–], [+], [/], «» -( Ins Del, - ), - NumLock; - . -(, ) . - , - : Ctrl+PgDn [+], Ctrl+PgUp [–] - Ctrl+Tab [/]. , Ctrl+Tab - , - . - , - : +

                Клавиши [–], [+], [/], связанные с «интеллектуальной» прокруткой +(как и клавиши Ins и Del, +связанные с дополнительной настройкой внешнего вида разделов с заданием), располагаются +в правой части цифровой клавиатуры и не зависят от режима NumLock; подобное расположение делает их +удобными для использования в качестве горячих клавиш. Однако при отсутствии цифровой клавиатуры +(например, на некоторых моделях ноутбуков) применение данных клавиш становится менее удобным. +Чтобы и в этой ситуации упростить выполнение команд с помощью горячих клавиш, предусмотрены +их альтернативные варианты: Ctrl+PgDn вместо [+], Ctrl+PgUp вместо [–]Ctrl+Tab вместо [/]. Заметим, что подобный способ использования комбинации Ctrl+Tab +соответствует способу ее использования в режиме с фиксированной компоновкой, в котором она +также обеспечивает переключение между полученными результатами и примером правильного решения. +Все указанные клавиатурные комбинации приводятся во всплывающих подсказках, которые отображаются +на экране при наведении курсора мыши на соответствующие кнопки:

                diff --git a/PABCNetHelp/IDE/intellisense.html b/PABCNetHelp/IDE/intellisense.html index 99d39295d..7e2ae762c 100644 --- a/PABCNetHelp/IDE/intellisense.html +++ b/PABCNetHelp/IDE/intellisense.html @@ -8,41 +8,41 @@ -

                (Intellisense)

                -

                1. -Ctrl+ .

                +

                Анализ Кода Времени Разработки (Intellisense)

                +

                1. Подсказка по +Ctrl+пробел выводит список всех доступных имен.

                -2. Shift+ - . /// - (, , -)

                +2. Подсказка по Shift+пробел выводит +список всех доступных имен из текущего модуля. Также добавился комментарий /// +который позволяет связать подсказку с элементом программы (процедура, функция, +переменная)

                -

                3. "". - , .

                +

                3. Подсказка по "точке". Если после имени +была нажата точка, то выдается список его членов.

                -4. +4. Подсказка параметров функций

                -5. -new , - - . , - .

                +5. Нажатие пробела после операции +new приводит к появлению подсказки, +состоящей только из имен типов только +с типами. Если из контекста понятен тип выражения, то курсор позиционируется +сразу на нужный тип.

                -6. " - ", " - ", " - ".

                +6. Пункты меню "Найти +все ссылки", "Перейти +к определению", "Перейти +к реализации".

                diff --git a/PABCNetHelp/Index.hhk b/PABCNetHelp/Index.hhk index 765832bf9..8704e2029 100644 --- a/PABCNetHelp/Index.hhk +++ b/PABCNetHelp/Index.hhk @@ -6946,327 +6946,327 @@
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - +
  • - + diff --git a/PABCNetHelp/LangGuide/Classes/abstractmethods.html b/PABCNetHelp/LangGuide/Classes/abstractmethods.html index 19eff0d7f..ecc3a348e 100644 --- a/PABCNetHelp/LangGuide/Classes/abstractmethods.html +++ b/PABCNetHelp/LangGuide/Classes/abstractmethods.html @@ -2,7 +2,7 @@ - + @@ -11,13 +11,13 @@ -

    -

    , , - abstract - . -, - virtual - . :

    +

    Абстрактные методы и классы

    +

    Методы, предназначенные для переопределения в подклассах, +объявляются с ключевым словом abstract +и называются абстрактными. Данные методы являются +виртуальными, +но ключевое слово virtual +использовать не нужно. Например:

    type
      Shape = class
    @@ -32,10 +32,10 @@     procedure Draw; abstract;
      end;

    -

    , , -. .

    -

    -"" . :

    +

    Классы, содержащие абстрактные методы, также называются +абстрактными. Экземпляры этих классов создавать нельзя.

    +

    Классы с абстрактными методами используются как +"полуфабрикаты" для создания других классов. Например:

    type
      Point = class(Shape)
    @@ -46,12 +46,12 @@     end;
      end;

    -

    override - , - .

    -

    , -abstract. -, :

    +

    Использование override +при переопределении абстрактных методов обязательно, поскольку +абстрактные методы являются разновидностью виртуальных.

    +

    Класс можно явно объявить абстрактным, используя ключевое слово +abstract. Обычно абстрактные классы содержат абстрактные +методы, но необязательно:

    type
      A = abstract class(Shape)
    diff --git a/PABCNetHelp/LangGuide/Classes/anontypes.html b/PABCNetHelp/LangGuide/Classes/anontypes.html index a26a8cd9c..95c3b931f 100644 --- a/PABCNetHelp/LangGuide/Classes/anontypes.html +++ b/PABCNetHelp/LangGuide/Classes/anontypes.html @@ -2,7 +2,7 @@ - + @@ -10,27 +10,27 @@ -

    -

    , . - ( ), .

    -

    :

    -
    var p := new class(Name := '', +

    Анонимные классы

    +

    Иногда необходимо сгенерировать объект класса на лету, не описывая класс. У +такого класса нет имени (он анонимный), но известен набор полей.

    +

    Объект анонимного класса создаётся следующим образом:

    +
    var p := new class(Name := 'Иванов', Age := 20);
    Println(p.Name,p.Age);
    -

    p Name Age - .

    -

    - , . :

    -
    var p1 := new class(Name := '', +

    У объекта p автоматически генерируются публичные поля Name и Age +соответствующих типов.

    +

    Два объекта принадлежат к одному анонимному классу если они имеют одинаковый +набор полей, и эти поля принадлежат к одинаковым типам. Например:

    +
    var p1 := new class(Name := 'Петров', Age := 21);
    p1 := p;
    -

    , - - - . :

    -
    var Name := '';
    var
    Age := 23;
    +

    Если поля безымянного класса инициализируются переменными, то имена полей +можно не писать - они генерируются автоматически и их имена и типы совпадают с +именами и типами переменных. Например:

    +
    var Name := 'Попова';
    var
    Age := 23;
    var
    p := new class(Name, Age);
    Println(p.Name,p.Age);
    -

    -, . - . :

    +

    Поля безымянного класса можно также инициализировать переменной с составным +именем, имеющим точечную нотацию. В этом случае в качестве имен полей берутся +последние имена в точечной нотации. Например:

    var d := new DateTime(2015,5,15);
    var p := new class(d.Day, d.Month, d.Year);
    Println(p.Day, p.Month, p.Year);
    Println(p);
    diff --git a/PABCNetHelp/LangGuide/Classes/attributes.html b/PABCNetHelp/LangGuide/Classes/attributes.html index f5869d2bf..fcd9f682a 100644 --- a/PABCNetHelp/LangGuide/Classes/attributes.html +++ b/PABCNetHelp/LangGuide/Classes/attributes.html @@ -3,7 +3,7 @@ - + @@ -11,38 +11,38 @@ -

    -

    , - - : public, private -protected, static, virtual override .

    -

    ( ) - -, , , , - ( ).

    -

    , -[Serializable], , , -[NonSerialized]. Unit- -[Test] [TestCase]. -().

    -

    - , System.Atribute. :

    +

    Атрибуты

    +

    В языке имеется ограниченное число стандартных атрибутов, задаваемых +ключевыми словами - например: атрибуты уровня доступа public, private и +protected, атрибуты static, virtual и override для методов.

    +

    Пользовательские атрибуты (далее просто атрибуты) - специальные языковые +конструкции, позволяющие помечать классы, методы, подпрограммы, параметры +некоторым именем (возможно с параметрами).

    +

    Например, для механизма сериализации класс помечается атрибутом +[Serializable], а поля, которые не следует сериализовывать, атрибутом +[NonSerialized]. При Unit-тестировании тестовый метод помечается атрибутом +[Test] или атрибутом [TestCase]. Распознаются атрибуты методом отражения +(рефлексии).

    +

    Атрибут - это обычный класс, унаследованный от System.Atribute. Например:

    type AuthorAttribute = class(System.Attribute)
      auto property Name: string;
      constructor (n: string);
      begin
        name := n;
      end
    end
    ;

    -

    , +

    Следует обратить внимание, что класс атрибута принято оканчивать на Attribute.

    -

    . - -. , - AuthorAttribute.

    +

    При пометке сущности атрибутом имя атрибута заключается в квадратные скобки. Конструктор атрибута предоставляет +также возможность использовать атрибуты с +параметрами. Например, можно пометить класс +атрибутом AuthorAttribute.

    [Author('Alex')]
    type
    My = class
      // ...
    end
    ;

    -

    , Attribute -.

    -

    , , , -:

    +

    Следует обратить внимание, что окончание Attribute можно не +указывать.

    +

    Распознать, помечен ли данный класс атрибутом, можно, используя +отражение:

    begin
      var t := typeof(My);
      var attrs := t.GetCustomAttributes(false);
      @@ -51,7 +51,7 @@ Attribute
    .

    then
          Print(auth.Name);
    end.

    -

    +

    След

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Classes/autoclasses.html b/PABCNetHelp/LangGuide/Classes/autoclasses.html index 48a9ee4be..e81c7d62d 100644 --- a/PABCNetHelp/LangGuide/Classes/autoclasses.html +++ b/PABCNetHelp/LangGuide/Classes/autoclasses.html @@ -2,7 +2,7 @@ - + @@ -18,19 +18,19 @@ -

    -

    class -auto. - . - , , -ToString, . :

    +

    Автоклассы

    +

    При описании класса перед словом class можно поставить слово +auto. Такие +классы называются автоклассами. Для автоклассов автоматически генерируется +конструктор с параметрами, инициализирующими все поля класса, а также метод +ToString, выводящий значения всех полей класса. Например:

    type Person = auto class
      name: string;
      age: integer;
    end;
    - var p := new Person('',20); // -
    Writeln(p); // - ToString
    -

    writeln -, .

    + var p := new Person('Иванов',20); // конструктор автокласса + генерируется автоматически
    Writeln(p); // вызывается сгенерированный + автоматически метод ToString
    +

    Здесь в отличие от действия writeln по умолчанию выводятся значения не только +публичных, а всех полей.

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Classes/classcast.html b/PABCNetHelp/LangGuide/Classes/classcast.html index 657ba36d6..78bbda286 100644 --- a/PABCNetHelp/LangGuide/Classes/classcast.html +++ b/PABCNetHelp/LangGuide/Classes/classcast.html @@ -2,7 +2,7 @@ - + @@ -11,12 +11,12 @@ -

    -

    - . - - .

    -

    :

    +

    Приведение типов объектов

    +

    Объект производного класса неявно преобразуется к типу +базового класса. Обратное преобразование от типа базового класса +к типу производного класса может быть выполнено только явно с помощью +операции приведения типа.

    +

    Например:

    type
      Person = class
    @@ -31,30 +31,30 @@  
    p: Person;
      s: Student;
    begin
    -  p := new Student('',20,3,1); // -
    -  s := Student(p); // -
    +  p := new Student('Иванов',20,3,1); // + неявное преобразование к типу базового класса
    +  s := Student(p); // явное + приведение к типу производного класса
    end.

    -

    - ( ; -, p - Person). +

    При выполнении приведения к производному классу может +возникнуть исключение (если приведение невозможно; +например, если в переменной p на момент +выполнения операции будет храниться объект типа Person).

    -

    - , :

    +

    После приведения к типу производного класса можно обращаться +к любым полям, свойствам и методам производного класса:

    s.IncCourse;

    -

    :

    +

    или без присваивания промежуточной переменной:

    Student(p).IncCourse;

    -

    - +

    Проверка на возможность приведения к типу производного класса +и безопасное приведение к типу производного класса осуществляется с помощью операций is - as.

    as.

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Classes/classconstr.html b/PABCNetHelp/LangGuide/Classes/classconstr.html index 21a8cd7c3..7807352b5 100644 --- a/PABCNetHelp/LangGuide/Classes/classconstr.html +++ b/PABCNetHelp/LangGuide/Classes/classconstr.html @@ -3,7 +3,7 @@ - + @@ -11,18 +11,18 @@ -

    , , ,

    -

    -, . , -. , , - , . -, -static. read write - .

    -

    , Person - - . - 1:

    +

    Статические классы, поля, методы, свойства и конструкторы

    +

    В классе можно объявить так называемые статические +поля, свойства и методы. Они не принадлежат конкретному экземпляру класса, а связаны с +классом. Для их вызова используется точечная нотация, причем, перед точкой +используется не имя объекта, а имя класса. Чтобы поле или свойство или метод сделать +статическим, перед его именем следует указать ключевое слово +static. При описании статических свойств в секциях read и write +можно указывать только статические поля или методы.

    +

    Например, определим для класса Person количество +созданных объектов этого класса как статическое поле и организуем доступ к этому +полю на чтение с помощью статической функции. После +каждого вызова конструктора значение статического поля будет увеличиваться на 1:

    type
      Person = class
      private
    @@ -43,24 +43,24 @@ property
    Coun: integer read cnt;
        end;
      end;

    begin
    var p: Person := new Person('
    ',20);
    var p1: Person := new Person('
    ',18);
    -  Writeln(Person.Count); //
    var p: Person := new Person('Иванов',20);
    var p1: Person := new Person('
    Петров',18);
    +  Writeln(Person.Count); //
    обращение к классовому методу Count
    end.

    -

    , -. -, .

    -

    , - . - - -static -   .

    -

    , Person - - Person - - . - RandomPerson, +

    В отличие от статических полей и методов, обычные поля и методы называются +экземплярными. Из обычных методов можно обращаться к экземплярным и статическим +полям, но из статических методов можно обращаться только к статическим полям.

    +

    Аналогично можно определить также статический конструктор, +предназначенный для автоматической инициализации классовых полей. Статический +конструктор описывается с ключевым +словом +static и гарантированно вызывается перед вызовом +любого статического метода и созданием первого объекта этого класса.

    +

    Например, определим в классе Person +статическое поле - массив объектов типа Person - и инициализируем его +в статическом конструкторе. Потом указанный массив можно использовать в реализации +статической функции RandomPerson, возвращающей случайный объект типа Person:

    type
    @@ -73,9 +73,9 @@ property Coun: integer read cnt;
        static constructor;
        begin
          SetLength(arr,3);
    -      arr[0] := new Person('',20);
    -      arr[1] := new Person('',19);
    -      arr[2] := new Person('',35);
    +      arr[0] := new Person('Иванов',20);
    +      arr[1] := new Person('Петрова',19);
    +      arr[2] := new Person('Попов',35);
        end;
        //...
        static function RandomPerson: Person;
    @@ -91,21 +91,21 @@ property Coun: integer read cnt;
        a[i] := Person.RandomPerson;
    end.

    -

    :

    +

    Класс также можно описывать как статический:

    type
      MyStatic = static class
        static
    Pi: real := 3.14;
        static
    function Pi2 := Pi * Pi;
      end;

    -

    , , -. . , - , - .

    -

    Delphi - - class, - +

    В этом случает все его методы, поля, свойства и конструкторы должны быть +статическими. Запрещается создавать экземпляры статических классов. Кроме того, +от статических классов нельзя наследовать, статический класс не может быть +предком и статическим классом нельзя инстанцировать обобщенный класс.

    +

    Для совместимости с Delphi статические члены класса можно также объявлять с +ключевым словом + class, которое в этом контексте +является синонимом static:

    type
    diff --git a/PABCNetHelp/LangGuide/Classes/classdefbefore.html b/PABCNetHelp/LangGuide/Classes/classdefbefore.html index 80e6d1175..b15de14c0 100644 --- a/PABCNetHelp/LangGuide/Classes/classdefbefore.html +++ b/PABCNetHelp/LangGuide/Classes/classdefbefore.html @@ -7,10 +7,10 @@ -

    -

    - , .

    -

    :

    +

    Предварительное объявление классов

    +

    Два или более класса могут содержать в качестве полей объекты +других классов, циклически ссылающиеся друг на друга.

    +

    Например:

    type
      AAA = class
    @@ -20,15 +20,15 @@     a: AAA;
      end;

    -

    , -BBB b - . -

    +

    Данный код вызовет ошибку компиляции, поскольку тип +BBB в момент описания поля b +еще не определен. В такой ситуации следует воспользоваться предварительным +описанием класса в виде

    -

    = class;

    +

    ИмяКласса = class;

    -

    - type:

    +

    Предварительно описанный класс должен быть полностью описан в +той же секции type:

    type
      BBB = class;
    diff --git a/PABCNetHelp/LangGuide/Classes/constrdestr.html b/PABCNetHelp/LangGuide/Classes/constrdestr.html index 1c066b196..3614cbf09 100644 --- a/PABCNetHelp/LangGuide/Classes/constrdestr.html +++ b/PABCNetHelp/LangGuide/Classes/constrdestr.html @@ -6,8 +6,8 @@ - - + +

  • @@ -15,17 +15,17 @@ -

    -

    -, .

    -

    , - , - . - . -function -constructor. , - .

    -

    :

    +

    Конструкторы

    +

    Объекты создаются с помощью специальных +методов, называемых конструкторами.

    +

    Конструктор представляет собой функцию, создающую объект в +динамической памяти, инициализирующую его поля и возвращающую ссылку на +созданный объект. Эта ссылка обычно сразу присваивается переменной +типа класс. При описании конструктора вместо ключевого слова +function используется ключевое слово +constructor. Кроме того, для конструктора не +указывается тип возвращаемого значения.

    +

    Например:

    type
      Person = class
    @@ -44,9 +44,9 @@ function
      ag := age;
    end;

    -

    PascalABC.NET - Create. - :

    +

    В PascalABC.NET конструктор +всегда должен иметь имя Create. При описании +конструктора внутри класса можно опускать его имя:

    type
      Person = class
        constructor (name: string; age: integer);
    @@ -56,38 +56,38 @@ function
        end;
      end;

    -

    -.NET PascalABC.NET - ( , -). -( - ,   - False).

    -

    .

    -

    1 . Object Pascal.

    -

    , --, . :

    +

    В силу особенностей реализации вызовов конструкторов в +.NET в PascalABC.NET всегда +создается конструктор без параметров (независимо от того, определен ли другой +конструктор). Этот конструктор инициализирует все поля нулевыми значениями +(строковые поля - пустыми строками, логические  - значением False).

    +

    Для вызова конструктора можно использовать два способа.

    +

    1 способ. В стиле Object Pascal.

    +

    Для вызова конструктора следует указать имя класса, за которым следует +точка-разделитель, имя конструктора и список параметров. Например:

    var p: Person;
    - p := Person.Create('',20);

    + p := Person.Create('Иванов',20);

    -

    2 . new - - C# ().

    +

    2 способ. С помощью операции new - в +стиле C# (предпочтительный).

    var p: Person;
    - p := new Person('',20);

    + p := new Person('Иванов',20);

    -

    Object Pascal - - , - , -. procedure - destructor.

    -

    :

    +

    Деструктор в Object Pascal - +специальная процедура, уничтожающая объект и +освобождающая динамическую память, которую этот объект +занимал. При описании деструктора вместо служебного слова procedure +используется служебное слово destructor.

    +

    Например:

    destructor Destroy;
    begin
      ...
    end;

    -

    PascalABC.NET - , PascalABC.NET - --.

    +

    Поскольку в PascalABC.NET +память управляется сборщиком мусора, деструктор в PascalABC.NET +не играет никакой роли и представляет собой обычную +процедуру-метод.

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Classes/constrinheritance.html b/PABCNetHelp/LangGuide/Classes/constrinheritance.html index 631941756..4f31ae657 100644 --- a/PABCNetHelp/LangGuide/Classes/constrinheritance.html +++ b/PABCNetHelp/LangGuide/Classes/constrinheritance.html @@ -9,39 +9,39 @@ -

    -

    - . - . , -Delphi Object Pascal . -.NET, , . - - -. .NET - - , - , .

    -

    PascalABC.NET . - , - , ( , - ). , - . , , - +

    Наследование конструкторов

    +

    Правила наследования конструкторов - достаточно сложные. В разных языках +программирования приняты разные решения на этот счет. В частности, в +Delphi Object Pascal все конструкторы наследуются. В +.NET, напротив, конструкторы не наследуются. Причина +такого решения - каждый класс сам должен отвечать за инициализацию своих +экземпляров. Единственное исключение в .NET - если +класс вовсе не определяет конструкторов, то автоматически генерируется +конструктор без параметров, называемый конструктором по умолчанию.

    +

    В PascalABC.NET принято промежуточное решение. Если класс не +определяет конструкторов, то все конструкторы предка автоматически генерируются +в потомке, вызывая соответствующие конструкторы предка (можно также говорить, +что они наследуются). Если в классе определяются конструкторы, то конструкторы +предка не генерируются. Конструктор по умолчанию, если он явно не определен, +генерируется автоматически в любом случае и является protected.

    -

    , .NET - ; -Object Pascal . -PascalABC.NET , - . - , - (.. ). - ( , -.NET- - - , PascalABC.NET, - ), .

    -

    :

    +

    Кроме того, в .NET обязательно в конструкторе +потомка первым оператором должен быть вызван конструктор предка; в +Object Pascal это необязательно. Если в +PascalABC.NET конструктор предка вызывается из конструктора потомка, то этот +вызов должен быть первым оператором. Если конструктор предка явно не +вызывается из конструктора потомка, то неявно первым оператором в конструкторе +потомка вызывается конструктор предка по умолчанию (т.е. без параметров). Если +такого конструктора у предка нет (это может быть класс, откомпилированный другим +.NET-компилятором или входящий в стандартную библиотеку +классов - все классы, откомпилированные PascalABC.NET, +имеют конструктор по умолчанию), то возникает ошибка компиляции.

    +

    Например:

    type
      A = class
        i: integer;
    -    // - ,
    +    // конструктор по +умолчанию не определен явно, поэтому генерируется автоматически
        constructor Create(i: integer);
        begin
          Self.i := i;
    @@ -51,10 +51,10 @@ PascalABC.NET
        j: integer;
        constructor Create;
        begin
    -
          // -
    -      // - ,
    +      // конструктор по умолчанию +базового класса вызывается автоматически
    +      // конструктор по +умолчанию определен явно, поэтому не генерируется автоматически
          j := 1;
        end;
        constructor Create(i,j: integer);
    @@ -64,11 +64,11 @@ PascalABC.NET
        end;
      end;
      C = class(B)
    -   // ,
    -  // +   // класс не определяет конструкторов, поэтому
    +  // конструктор по умолчанию и constructor Create(i,j: integer)   
    -  // , -
    +  // генерируются автоматически, вызывая в своем +теле соответствующие конструкторы предка
      end;
     

    diff --git a/PABCNetHelp/LangGuide/Classes/extensionmethods.html b/PABCNetHelp/LangGuide/Classes/extensionmethods.html index 68c25c24f..4a2cf6f43 100644 --- a/PABCNetHelp/LangGuide/Classes/extensionmethods.html +++ b/PABCNetHelp/LangGuide/Classes/extensionmethods.html @@ -2,7 +2,7 @@ - + @@ -11,13 +11,13 @@ -

    -

    , dll, - .NET . - - extensionmethod. - Self . -, :

    +

    Методы расширения

    +

    Любой существующий тип, хранящийся во внешней dll, и все типы стандартной +библитеки .NET можно расширить новыми методами. Метод расширения определяется +как процедура или функция с модификатором + extensionmethod. Первый параметр метода расширения +обязательно должен иметь имя Self и принадлежит к расширяемому типу. Сравним две +процедуры, описанные ниже:

    procedure MyPrint(Self: integer);
    begin
      writeln(Self)
    end;

    procedure
    MyPrintEx(Self: integer); @@ -25,29 +25,29 @@ end;

    begin
      MyPrint(1);
      1.MyPrintEx;
    end.
    -

    MyPrint - integer, MyPrintEx - - integer. MyPrintEx - , MyPrintEx .

    -

    , , - ( , List<T>, -HashSet<T> SortedSet<T>), - . , PABCSystem - ForEach :

    +

    Здесь MyPrint - это обычная процедура с параметром типа integer, MyPrintEx - +метод расширения типа integer. При этом при вызове первый параметр MyPrintEx +становится объектом, вызывающим MyPrintEx как метод.

    +

    Можно расширить тип последовательности, тогда все классы, являющиеся +последовательностями (динамические одномерные массивы, списки List<T>, множества +HashSet<T> и SortedSet<T>), +получат этот метод. Например, в системном модуле PABCSystem так введен метод +расширения ForEach для последовательностей:

    procedure &ForEach<T>(Self: sequence of T; action: T -> ()); extensionmethod;
    begin
      foreach x: T in Self do
        action(x);
    end;
    -

    -:

    +

    С помощью методов расширения можно перегружать +операции:

    procedure operator+=<T>(a: List<T>; x: T): List<T>; extensionmethod;
    begin
      a.Add(x);
    end;
    -

    Self.

    -

    :

    +

    В этом случае первый параметр не обязан иметь имя Self.

    +

    Для методов расширения имеется ряд ограничений:

      -
    • .
    • -
    • , , - .
    • +
    • Методы расширения не могут быть виртуальными.
    • +
    • Если метод расширения имеет то же имя, что и обычный метод, то + предпочтение отдаётся обычному методу.

     

    diff --git a/PABCNetHelp/LangGuide/Classes/index_classes.html b/PABCNetHelp/LangGuide/Classes/index_classes.html index 295df1e88..d47f8bbc2 100644 --- a/PABCNetHelp/LangGuide/Classes/index_classes.html +++ b/PABCNetHelp/LangGuide/Classes/index_classes.html @@ -6,7 +6,7 @@ - : +Классы и объекты: обзор -

    -

    - , List<T> , - .

    -

    :

    +

    Срезы

    +

    Срез - это набор элементов динамического массива, списка List<T> или строки, +расположенных последовательно либо с некоторым шагом.

    +

    Срез имеет вид:

    a[from:to]
    -

    +

    или

    a[from:to:step]
    -

    +

    или

    a?[from:to]
    -

    +

    или

    a?[from:to:step]
    -

    [from, -to) - step. [from, -to) , -from -, to - . - from, +

    и содержит копию элементов исходного контейнера в диапазоне [from, +to) с +шагом step. Запись [from, +to) означает, что элемент с индексом +from включается в +диапазон, а элемент с индексом to - не включается. +Значения from, to, step - .

    -

    step , , -step=1, .. - .

    -

    : - , - List<T> +должны быть целыми.

    +

    Если step не указывается, то предполагается, что +step=1, т.е. элементы +расположены непрерывно.

    +

    Тип среза совпадает с типом контейнера: срез элементов массива представляет +собой массив, срез строки - строку и срез для List<T> также принадлежит к типу List<T>.

    -

    . from , - . -to 1, .. - [-1..a.Count] List<T> - [0..s.Length+1] , -.

    -

    -step=0, .

    -

    +

    Для обычных срезов исключение генерируется в следующих случаях. Если индекс from выходит за границы, то во +время выполнения программы возникает исключение. Индекс +to может выходить за границы на 1, т.е. +находиться в диапазоне [-1..a.Count] для динамических массивов и списков List<T> +и в диапазоне [0..s.Length+1] для строк, в противном случае также возникает +исключение.

    +

    Если +step=0, то для всех видов срезов генерируется исключение.

    +

    Срезы вида a? - -. . - . - , -.

    -

    :

    +называются безопасными срезами и во всех остальных случаях не генерируют +исключений. Они работают следующим образом. Вначале контейнер считается +бесконечным в обе стороны и срез выбирает в нём определённые элементы. После +этого в срезе оставляются только те элементы, которые принадлежат исходному +контейнеру.

    +

    Приведём ряд примеров:

    var a := Arr(0,1,2,3,4,5,6);
    Println(a[2:5]); // [2,3,4]
    - Println(a[2:a.Length]); // [2,3,4,5,6]
    Println(a[2:1000]); // !
    Println(a?[2:1000]); + Println(a[2:a.Length]); // [2,3,4,5,6]
    Println(a[2:1000]); // Исключение!
    Println(a?[2:1000]); // [2,3,4,5,6]
    Println(a[2:7:2]); // [2,4,6]
    - Println(a[2:0]); //
    var s := '0123456';
    - Println(s[2:5]); // 123
    Println(s[0:2]); // !
    Println(s?[0:2]); + Println(a[2:0]); // пустой массив
    var s := '0123456';
    + Println(s[2:5]); // 123
    Println(s[0:2]); // Исключение!
    Println(s?[0:2]); // 12
    Println(s?[-2::2]); // 135
    Println(s[2:s.Length]); // 12345

    -

    step . :

    +

    Шаг step может быть отрицательным. Например:

    var a := Arr(0,1,2,3,4,5,6);
    Println(a[5:2:-1]); // - [5,4,3]
    Println(a[2:5:-1]); //
    + [5,4,3]
    Println(a[2:5:-1]); // пустой массив
    Println(a[a.Length-1:-1:-2]); // [6,4,2,0]

    -

    from -to , - . -step>0, from - , to - + 1. -step<0, -from -, to - - - 1.

    -

    :

    +

    В записи среза выражение from или выражение +to могут быть пропущены, в этом случае в срез +попадают все элементы с соответствующей стороны. Если +step>0, то пропущенный from полагается +равным индексу первого элемента, пропущенный to +полагается равным индексу последнего элемента + 1. Если +step<0, то пропущенный +from полагается равным индексу последнего +элемента, а пропущенный to - индексу первого +элемента - 1.

    +

    Например:

    var s := '0123456';
    Println(s[2:]); // 23456
    Println(s[:4]); // 012
    Println(s[::-1]); // 6543210

    -

    Slice, -, List<T>, . , - - : a.Slice(from,step,count).

    +

    Родственным к срезам является метод Slice, определенный для динамических +массивов, списков List<T>, строк и последовательностей. Однако, смысл параметров +у него - другой: a.Slice(from,step,count).


     

    diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/addrop.html b/PABCNetHelp/LangGuide/Operations_Expressions/addrop.html index 3a2339f29..cdaa91790 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/addrop.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/addrop.html @@ -4,10 +4,10 @@ -

    @

    -

    @ - . - . :

    +

    Операция @

    +

    Операция @ +применяется к переменной и возвращает ее адрес. Тип результата +представляет собой типизированный указатель на тип переменной. Например:

    var
      r: real;
    diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/arithmop.html b/PABCNetHelp/LangGuide/Operations_Expressions/arithmop.html index 082ea668e..9170298b7 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/arithmop.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/arithmop.html @@ -2,7 +2,7 @@ - + @@ -13,16 +13,16 @@ } -

    -

    +

    Арифметические операции

    +

    К арифметическим относятся бинарные операции +, -, -*, / , -div mod -+ - . -x op y, -op - -+- *, - :

    +*, / для вещественных и целых чисел, бинарные операции +div и mod для целых чисел и унарные операции ++ и - для вещественных и целых чисел. Тип выражения +x op y, где +op - знак бинарной операции ++- или *, +определяется из следующей таблицы:

     

    @@ -231,40 +231,40 @@
    decimal
    -

    , - , -, .

    -

    uint64 - uint64, - , .

    -

    / : - real.

    -

    div mod , . - div -mod - :

    +

    То есть, если операнды - целые, то результатом является самый короткий целый +тип, требуемый для представления всех получаемых значений.

    +

    При выполнении бинарной операции с uint64 +и знаковым целым результирующим типом будет uint64, +при этом может произойти переполнение, не вызывающее исключения.

    +

    Для операции / данная таблица исправляется следующим образом: +результат деления любого целого на целое имеет тип real.

    +

    Для операций div и mod выполняются эти же правила, но операнды могут быть только целыми. Правила +вычисления операций div и +mod - следующие:

    -

    x div y - - x y. - , x div y = x / y, - 0;
    - x mod y
    - - x y. , +

    x div y - результат + целочисленного деления x на y. + Точнее, x div y = x / y, + округленное до ближайшего целого по направлению к 0;
    + x mod y
    - остаток от целочисленного + деления x на y. Точнее, x mod y = x - (x div y) * y.

    -

    -+ . - - , - integer, integer, -longword int64 -- int64, uint64 - , single real - -single real. - , - .

    -

    **. - x ** y :

    +

    Унарная арифметическая операция ++ для любого целого типа возвращает этот тип. Унарная +арифметическая операция - возвращает для целых типов, меньших или +равных integer, значение типа integer, для +longword и int64 +- значение типа int64, к uint64 унарная операция - не применима, для типов single и real - соответственно типы +single и real. То есть так же +результатом является самый короткий тип, требуемый для представления всех +получаемых значений.

    +

    К арифметическим относится также операция возведения в степень **. +Выражение x ** y возвращает:

      -
    •   -
    • -
    • Complex Complex
    • -
    • BigInteger x BigInteger, y - .
    • +
    •  вещественное значение если операнды - целые или вещественные
    • +
    • тип Complex если один из операндов имеет тип Complex
    • +
    • тип BigInteger если x имеет тип BigInteger, а y - целый тип.
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/bitop.html b/PABCNetHelp/LangGuide/Operations_Expressions/bitop.html index 938c076d3..bbbecb359 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/bitop.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/bitop.html @@ -18,21 +18,21 @@ } -

    +

    Побитовые операции

    - - and, or, not, -xor, shl, shr. - . - and, or, -xor , . - shl, shr - , not -- .

    +К +побитовым относятся бинарные операции and, or, not, +xor, shl, shr. Они +производят побитовые манипуляции с операндами целого типа. Результирующий тип +для and, or, +xor будет наименьшим целым, включающим все возможные значения обоих типов операндов. +Для shl, shr результирующий +тип совпадает с типом левого операнда, для not +- с типом операнда.

    - : (0 - False, 1 - True) - . :

    +Побитовые операции осуществляются следующим образом: с каждым битом (0 +принимается за False, 1 - за True) +производится соответствующая логическая операция. Например:

    00010101 and 00011001 = 00010001
    00010101 or 00011001 = 00011101
    @@ -40,41 +40,41 @@ not 00010101 = 11101010

    -( ).

    +(операнды и результат представлены в двоичной форме).

    - not, and, or xor . - , - .

    +Операции not, and, or и xor предназначены для работы с беззнаковыми целыми. +Знаковые целые трактуются как беззнаковые, с этой точки зрения применеие этих +операций к знаковым целым лишено смысла.

    - shl -shr :

    +Операциии shl и +shr имеют вид:

    a shl n
    a shr n

    - n - , a - .

    +где n - целое положительное число, a - целое число.

    -a shl n , - a n . - .

    +a shl n
    представляет собой целое положительное, полученное из двоичного +представления числа a сдвигом влево на n позиций. Добавляемые справа позиции +заполняются нулями.

    -a shr n , - a n .

    +a shr n представляет собой целое положительное, полученное из двоичного +представления числа a сдвигом вправо на n позиций.

    -:

    +Например:

    3 shl 2 = 12
    12 shr 2 = 3

    - 3=112, 2 112 11002=12, -12=11002 2 112=3.

    +поскольку 3=112, после сдвига влево на 2 позиции 112 преобразуется в 11002=12, а +12=11002 после сдвига вправо на 2 позиции преобразуется в 112=3.

    - shl shr .

    +Для знаковых целых операции shl и shr сохраняют знак.

     

    diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/expressions.html b/PABCNetHelp/LangGuide/Operations_Expressions/expressions.html index 266396aa6..832f7e459 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/expressions.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/expressions.html @@ -9,55 +9,55 @@ - + -

    -

    //

    - . . , , , . , , .

    Pascal ABC : @, not, ^, *, /, div, mod, and, shl, shr, +, -, or, xor, +

    Выражения и операции

    +

    // устарело и отсутствует в справке

    +Любое выражение имеет определенный тип и после вычисления возвращает некоторое значение. Простейшими выражениями являются переменные и константы. Более сложные выражения строятся из более простых с использованием операций, скобок, вызовов функций, индексов и приведений типов. Данные, к которым применяются операции, называются операндами.

    В Pascal ABC имеются следующие операции: @, not, ^, *, /, div, mod, and, shl, shr, +, -, or, xor, .., -in, =>, =, >, <, <>, <= >=.

    -

    -+ - * / , -div mod -+ - . , - , . : -/, integer, real. , b byte, -c 1..9, -b+c -b integer, 2.0+b 1/2 - real.

    - and, or xor, - not, - - boolean -boolean. , -boolean, .

    -<, >, <=, >=, =, <> boolean -, , , , - . = <> pointer, , - nil. - 1.

    - and, or, not, +in, =>, =, >, <, <>, <= и >=.

    +

    Арифметические операции

    К арифметическим относятся бинарные операции ++ - * / для вещественных и целых чисел, бинарные операции +div и mod для целых чисел и унарные операции ++ и - для вещественных и целых чисел. Выражение, +имеющее числовой тип, называется арифметическим. Тип арифметического выражения определяется по следующему правилу: если все операнды целые и в выражении отсутствует операция деления +/, то выражение имеет тип integer, в противном случае выражение имеет тип real. Например, если b имеет тип byte, +c имеет тип 1..9, то +b+c и -b имеют тип integer, а 2.0+b и 1/2 - тип real.

    Логические операции

    К +логическим относятся бинарные операции and, or и xor, а также унарная +операция not, +имеющие операнды +типа boolean и возвращающие значение типа +boolean. Выражение, имеющее тип +boolean, называется логическим.

    Операции отношения

    Операции отношения +<, >, <=, >=, =, <> возвращают значение типа boolean и применяются к операндам +целого, вещественного, символьного, логического и строкового типов, а также к +типизированным указателям. Операции = и <> также применяются к операндам типа pointer, к операндам, +являющихся объектами классов и к константе nil. При сравнении +символа и строки символ преобразуется в строку длины 1.

    Побитовые операции

    +Побитовые операции and, or, not, xor, shl, shr - . -not , . - integer. -, b -byte -b=1, b shl 10=1024, not b=254.

    -

    <, >, <=, >=, =, <>, - () +. . -, 'a'+'b'='ab'.

    -

    @

    @ - .

    - ^: - p T, - p^ - T, - p.

    -

    - + (), - -() * ():

    +производят побитовые манипуляции с операндами целого типа. Для унарной операции +not результат имеет тот же тип, что и операнд. Для остальных операций результат имеет +тип integer. +Например, если b имеет тип +byte и +b=1, то b shl 10=1024, а not b=254.

    +

    Строковые операции

    Помимо операций отношения <, >, <=, >=, =, <>, к строковым и символьным операндам применима операция +конкатенации (слияния) +. Ее результат имеет строковый тип. +Например, 'a'+'b'='ab'.

    +

    Операция @

    Операция @ +применяется к переменной и возвращает ее адрес.

    Операции с указателями

    +К типизированным указателям применима операция разыменования ^: +если p является указателем на тип T, +то p^ - элемент типа T, на +который указывает p.

    +

    Операции с множествами

    К множествам применимы +операции + (объединение), - +(разность) и * (пересечение):

    var
      s1,s2,s: set of byte;
    @@ -68,9 +68,9 @@ b=1
    ,   s:=s1-s2; // s=[1]
      s:=s1*s2; // s=[2..4]

    -

    = (), <> -(), <= () ->= ():

    +

    К множествам применимы также операции отношения = (равенство), <> +(неравенство), <= (вложено) и +>= (содержит):

    var
      s1,s2,s: set of byte;
    @@ -84,14 +84,14 @@ b=1
    ,   b:=s<=s2; // b=False
      b:=s1>=s; // b=True

    -

    , in -, :

    +

    Наконец, операция in +определяет, принадлежит ли элемент множеству:

    1 in [2..5] // False
    3 in [2..5] // True

    -

    ..

    .. - Range:

    +

    Операция ..

    Операция .. формирует диапазон значений и является +синоним функции Range:

    foreach var x in 2..5 do // foreach var x in Range(2,5) do
      @@ -99,27 +99,27 @@ b=1
    , var a := Arr(2..5);
    var h := HSet('2'..'5');

    -

    .

    -

    +

    В качестве границ диапазона могут выступать целые или символьные значения.

    +

    Выражение

    x in 2..5

    -

    ,

    +

    предельно эффективно, поскольку преобразуется на этапе компиляции в

    (x >= 2) and (x <= 5)

    -

    -

    . - , . , - , .

    -

    +

    Приоритет операций

    +

    Приоритет определяет порядок выполнения операций в выражении. +Первыми выполняются операции, имеющие высший приоритет. Операции, имеющие +одинаковый приоритет, выполняются слева направо.

    +

    Таблица приоритетов операций

    - + @@ -139,7 +139,7 @@ b=1, @@ -160,7 +160,7 @@ b=1, - +
    @, not, - ^, +, - (), new + ^, +, - (унарные), new 1 ()1 (наивысший)
    **
    +, - - (), + - (бинарные), or, xor 4
    ?:  7 ()7 (низший)
    diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/funccall.html b/PABCNetHelp/LangGuide/Operations_Expressions/funccall.html index e0cd01aaf..47013522f 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/funccall.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/funccall.html @@ -4,25 +4,25 @@ -

    - , - :
    -

    +

    Выражение вызова функции

    +В выражениях можно использовать вызов функции, имеющий такой же вид как и +оператор вызова процедуры:
    +

    имя функции

    -

    +

    или

    -

    ( - )

    +

    имя функции(список + фактических параметров)

    -

    - , - ( - -). -, , - , , - , - .

    +

    Количество фактических параметров должно совпадать с +количеством формальных, а типы фактических параметров должны +соответствовать типам соответствующих формальных (исключение составляют +подпрограммы с параметрами по умолчанию и подпрограммы с переменным числом +параметров). Фактические +параметры, передаваемые по значению, должны быть совместимы по присваиванию с +соответствующими формальными параметрами, типы фактических параметров, +передаваемых по ссылке, должны быть эквивалентны типам соответствующих +формальных параметров.

     

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/index_expressions.html b/PABCNetHelp/LangGuide/Operations_Expressions/index_expressions.html index e70171aca..4b5a33d1a 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/index_expressions.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/index_expressions.html @@ -4,49 +4,49 @@ -

    :

    - - , . - . , - . , - , . -

    PascalABC.NET : @, not, ^, *, /, div, mod, and, shl, shr, +, -, or, xor, =, >, <, <>, <=, >=, +

    Выражения и операции: обзор

    +Выражение - это конструкция, возвращающая значение некоторого типа. Простыми +выражениями являются переменные и константы. Более сложные выражения строятся из простых с помощью операций, +вызовов функций и скобок. Данные, к которым +применяются операции, называются операндами. +

    В PascalABC.NET имеются следующие операции: @, not, ^, *, /, div, mod, and, shl, shr, +, -, or, xor, =, >, <, <>, <=, >=, as, is, -in, new - . @, --, +, ^, not, new - ( ), - ( ), -+ -- .

    -

    PascalABC.NET

    +in
    , а также операция new +и операция приведения типа. Операции @, +-, +, ^, not, операция приведения типа и операция new +являются унарными (имеют один операнд), остальные являются +бинарными (имеют два операнда), операции ++ и +- являются и бинарными и унарными.

    +

    Справка по операциям PascalABC.NET

    -

    . -PascalABC.NET , - .

    +

    Порядок выполенения операций определяется их приоритетом. В языке +PascalABC.NET имеется четыре уровня приоритетов операций, задаваемых +таблицей приоритетов.

    -

    . - .NET- .

    +

    Ряд операций для определяемых пользователем типов можно перегружать. Можно +также перегружать операции для .NET-типов если они не были перегружены.

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/isasop.html b/PABCNetHelp/LangGuide/Operations_Expressions/isasop.html index c1471293b..ed53f8b3a 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/isasop.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/isasop.html @@ -6,37 +6,37 @@ -

    is as

    -

    is , - . - as - ( - ).

    -

    -is :

    +

    Операции is и as

    +

    Операция is предназначена для проверки того, имеет ли +классовая переменная указанный динамический тип. +Операция as позволяет безопасно преобразовать переменную +одного классового типа к другому классовому типу (в отличие от +явного приведения классового типа).

    +

    Операция +is имеет вид:

    a is ClassType

    -

    True -a ClassType - .

    -

    , Base - Derived - , , -Derived - Base, - b d Base - Derived, -b is Base d is -Base True, - b is Derived - False.

    -

    -as :

    +

    и возвращает True если +a принадлежит к классу ClassType +или одному из его потомков.

    +

    Например, если BaseDerived - классы, причем, +Derived - потомок Base, +переменные b и d имеют соответственно типы BaseDerived, то выражения +b is Base и d is +Base возвращают True, +а b is Derived - False.

    +

    Операция +as имеет вид:

    a as ClassType

    -

    -ClassType , - nil.

    -

    ,

    +

    и возвращает ссылку на объект типа +ClassType если преобразование возможно, в +противном случае возвращает nil.

    +

    Например, в программе

    type
      Base = class
    @@ -54,17 +54,17 @@ Base
      writeln(b is Derived);
    end.

    -

    False, - - True.

    -

    is -as - , .

    -

    1 .

    +

    первый раз выводится False, +второй - True.

    +

    Операции is и +as используются для работы с +переменной базового класса, содержащей объект производного класса.

    +

    1 способ.

    if b is Derived then
      Derived(b).p;

    -

    2 .

    +

    2 способ.

    var d: Derived := b as Derived;
    d.p;

    diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/logicop.html b/PABCNetHelp/LangGuide/Operations_Expressions/logicop.html index 3bdf454e2..bbbedc732 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/logicop.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/logicop.html @@ -8,32 +8,32 @@ -

    -

    - and, or xor, - not, - - boolean -boolean. - : a and b - , a +

    Логические операции

    +

    К +логическим относятся бинарные операции and, or и xor, а также унарная +операция not, +имеющие операнды +типа boolean и возвращающие значение типа +boolean. Эти операции подчиняются стандартным +правилам логики: a and b истинно +только тогда, когда истинны a и b, a or b - , a, - b, a xor b - , a - b , -not a , a -. 

    -

    and -or - :

    +истинно только тогда, когда истинно либо a, +либо b, a xor b +истинно только тогда, когда только одно из ab истинно, +not a истинно только тогда, когда a +ложно. 

    +

    Выражения с and и +or вычисляются по +короткой схеме:

    -

    x and y - x , - , y ;
    - x or y - x , , - y .

     

    +

    в выражении x and y + если x ложно, то все + выражение ложно, и y не вычисляется;
    + в выражении x or y если + x истинно, то все выражение истинно, и + y не вычисляется.

     

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/newop.html b/PABCNetHelp/LangGuide/Operations_Expressions/newop.html index 60357fedf..52b3026b5 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/newop.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/newop.html @@ -5,16 +5,16 @@ -

    new

    -

    +

    Операция new

    +

    Операция -new :

    +new
    имеет вид:

    -

    new ()

    +

    new ИмяКласса(ПараметрыКонструктора)

    -

    - .

    -

    :

    +

    Она вызывает конструктор класса ИмяКласса и возвращает +созданный объект.

    +

    Например:

    type
      My = class
    @@ -24,19 +24,19 @@   end;

    var m: My := new My(5);

    -

    - Object Pacal:

    +

    Эквивалентным способом создания объекта является вызов +конструктора в стиле Object Pacal:

    var m: My := My.Create(5);

    -

    -, :

    +

    Создание объекта класса при инициализации переменной проще +проводить, используя автоопределение типа:

    var m := new My(5);

    -

    , -. -( ) .

    +

    В записи также могут быть определены конструкторы, которые вызываются +аналогично. Но в отличие от класса вызов конструктора записи не выделяет память +(она уже выделена) и только заполняет значения полей.


     

    diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/oppriority.html b/PABCNetHelp/LangGuide/Operations_Expressions/oppriority.html index c3c11789f..d15df1eab 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/oppriority.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/oppriority.html @@ -1,24 +1,24 @@ - + -

    -

    . - , . , - , .

    -

    +

    Приоритет операций

    +

    Приоритет определяет порядок выполнения операций в выражении. +Первыми выполняются операции, имеющие высший приоритет. Операции, имеющие +одинаковый приоритет, выполняются слева направо.

    +

    Таблица приоритетов операций

    - + @@ -36,7 +36,7 @@ @@ -57,12 +57,12 @@ - +
    **1 ()1 (наивысший)
    @, not, - ^, +, - (), new + ^, +, - (унарные), new 2
    +, - - (), + - (бинарные), or, xor 4
    ?:  7 ()7 (низший)
    -

    - .
    +

    Для изменения порядка выполнения операций в выражениях +используются скобки.
     

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/pointerop.html b/PABCNetHelp/LangGuide/Operations_Expressions/pointerop.html index 3620b368f..8f268eecd 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/pointerop.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/pointerop.html @@ -1,19 +1,19 @@ - + -

    +

    Операции с указателями

    - - = <>.

    +Ко всем указателям применимы +операции сравнения = и <>.

    - ^: - p T, - p^ - T, - p. pointer - .

    +К типизированным указателям применима операция разыменования ^: +если p является указателем на тип T, +то p^ - элемент типа T, на +который указывает p. Указатели pointer +разыменовывать нельзя.

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/relop.html b/PABCNetHelp/LangGuide/Operations_Expressions/relop.html index e721692c0..676226346 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/relop.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/relop.html @@ -1,20 +1,20 @@ - + -

    -

    -<, >, <=, >=, =, <> boolean - .

    -

    = <> -. , - - . , - = -<>. - , .
    +

    Операции сравнения

    +

    Операции сравнения +<, >, <=, >=, =, <> возвращают значение типа boolean и применяются к операндам +простого типа и к строкам.

    +

    Операции = и <> также применяются ко всем +типам. Для размерных типов по умолчанию сравниваются значения, для ссылочных +типов - ссылки. Можно переопределить это поведение, +перегрузив операции = и +<>. Аналогично можно перегрузить все +операции сравнения для типов записей и классов, вводимых пользователем.

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/setop.html b/PABCNetHelp/LangGuide/Operations_Expressions/setop.html index 98be0d515..924a69a2c 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/setop.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/setop.html @@ -5,12 +5,12 @@ -

    -

    - in -() + (), - -() * (), -+=, -= +

    Операции с множествами

    +

    К множествам с базовыми элементами одного типа применимы +операции in +(принадлежность) + (объединение), - +(разность) и * (пересечение), а также операторы ++=, -= и *=:

    var s1,s2,s: set of byte;
    @@ -20,9 +20,9 @@   s := s1 + s2; // s = [1..5]
      s := s1 - s2; // s = [1]
      s := s1 * s2; // s = [2..4]
    // s += - s1 s := s + s1
    // s -= - s1 s := s - s1
    // s *= - s1 s := s * s1
      s += + s1 эквивалентно s := s + s1
    // s -= + s1 эквивалентно s := s - s1
    // s *= + s1 эквивалентно s := s * s1
      s += [3..6];  // s = [2..6]
      s -= [3];     // s = [2,4..6]
    @@ -30,10 +30,10 @@
      Print(3 in s1); // True
    end.

    -

      - = (), <> -(), <= ( ), < ( ), >= ( ) -> ( ):

    +

    К множествам с базовыми элементами одного типа применимы также операции +сравнения = (равенство), <> +(неравенство), <= (нестрого вложено), < (строго вложено), >= (нестрого содержит) и +> (строго содержит):

    [1..3] = [1,2,3]
    ['a'..'z'] <> ['0'..'9']
    @@ -42,12 +42,12 @@ [1..5] > [2..4]
    [1..5] >= [1..5]

    -

    , [1..5] < [1..5].

    -

    , in -, : 3 in [2..5] - True, 1 in [2..5] False.

    -

    HashSet<T> SortedSet<T>. - , :

    +

    Но неверно, что [1..5] < [1..5].

    +

    Наконец, операция in +определяет, принадлежит ли элемент множеству: 3 in [2..5] +вернет True, 1 in [2..5] вернет False.

    +

    К множествам относятся также типы HashSet<T> и SortedSet<T>. К переменным +этого типа применимы те же операции, что и к встроенным множествам:

    begin
      var diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/stringop.html b/PABCNetHelp/LangGuide/Operations_Expressions/stringop.html index 7f65ea9ae..2dc749189 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/stringop.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/stringop.html @@ -1,6 +1,6 @@ - + @@ -14,38 +14,38 @@ } -

    -

    <, >, <=, >=, =, <>. - -: s1 < s2 - i s1[i]<s2[i] - , s1 +

    Строковые операции

    +

    К строкам применимы все операции сравнения <, >, <=, >=, =, <>. +Сравнение строк на неравенство осуществляется +лексикографически: s1 < s2 если для +первого несовпадающего символа с номером i s1[i]<s2[i] +или все символы строк совпадают, но s1 короче s2.

    -

    , - () +, . +

    Кроме этого, к строкам и символам применима операция +конкатенации (слияния) +, ее результат имеет строковый тип.

    -

    , 'a'+'b'='ab'.

    +

    Например, 'a'+'b'='ab'.

    -

    +=: +

    К строкам также применима операция +=:

    s += s1; // s := s + s1;

    -

    , - :

    -
    s := ': '+15; // s = ': 15'
    s := +

    Строка может складываться с числом, при этом число предварительно +преобразуется к строковому представлению:

    +
    s := 'Ширина: '+15; // s = 'Ширина: 15'
    s := 20.5+''; // s = '20.5'
    s += 1; // s = '20.51'
    -

    *: -s*n n*s - , s, - n :

    +

    Над строками и целыми определена операция *: +s*n и n*s +означает строку, образованную из строки s, +повторенной n раз:

    s := '*'*10; // s = '**********'
    s := 5*'ab' // s = 'ababababab'
    s := 'd'; s *= 3; // s = 'ddd' 
    -

    in - :

    +

    Над строками определена операция in для +проверки вложения подстроки в строку:

    'bc' in 'abcde' // True 
    'c' in 'abd' // False
    diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/typecast.html b/PABCNetHelp/LangGuide/Operations_Expressions/typecast.html index a010e7065..28202d0c7 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/typecast.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/typecast.html @@ -13,18 +13,18 @@ -

    -

    +

    Операция явного приведения типов

    +

    Операция явного приведения типов имеет вид

    -

    ()

    +

    ИмяТипа(выражение)

    -

    . - - , , -, . - - .

    -

    .

    +

    и позволяет преобразовать выражение к типу ИмяТипа. +Тип выражения и тип с именем ИмяТипа должны оба принадлежать либо к +порядковому типу, либо к типу указателя, либо один тип должен быть наследником +другого, либо тип выражения должен поддерживать интерфейс с именем ИмяТипа. В случае +указателей запрещено +преобразовывать типизированный указатель к типу указателя на другой тип.

    +

    Пример.

    type
      pinteger = ^integer;
    @@ -40,8 +40,8 @@   s := Season(1);
    end

    -

    Object .

    -

    .

    +

    При приведении размерных типов к типу Object происходит упаковка.

    +

    Пример.

    var i: integer := 5;
    begin
     
    var o: Object := Object(i);
    diff --git a/PABCNetHelp/LangGuide/Operations_Expressions/typeof_sizeof.html b/PABCNetHelp/LangGuide/Operations_Expressions/typeof_sizeof.html index 7733bd14d..67dfe066b 100644 --- a/PABCNetHelp/LangGuide/Operations_Expressions/typeof_sizeof.html +++ b/PABCNetHelp/LangGuide/Operations_Expressions/typeof_sizeof.html @@ -6,13 +6,13 @@ -

    typeof sizeof

    -

    sizeof( ) - .

    -

    typeof( -) - System.Type. - typeof:

    +

    Операции typeof и sizeof

    +

    Операция sizeof(имя типа) +возвращает для этого типа его размер в байтах.

    +

    Операция typeof(имя +типа) возвращает для этого типа объект +класса System.Type. +Приведем пример использования typeof:

    type
      Base = class ... end;
    diff --git a/PABCNetHelp/LangGuide/Operators/assign.html b/PABCNetHelp/LangGuide/Operators/assign.html index e5082b3ca..eb445ee11 100644 --- a/PABCNetHelp/LangGuide/Operators/assign.html +++ b/PABCNetHelp/LangGuide/Operators/assign.html @@ -2,7 +2,7 @@ - + @@ -10,54 +10,54 @@ -

    - : +

    Оператор присваивания

    +Оператор присваивания имеет вид:
    -

    :=

    +

    переменная := выражение

    -

    , -, . - := . - .

    -

      -.

    -

    :

    +

    В качестве переменной может быть простая переменная, разыменованный +указатель, переменная с индексами или компонент переменной типа запись. +Символ := называется значком присваивания. Выражение должно быть совместимо по +присваиванию с переменной.

    +

    Оператор присваивания заменяет текущее значение переменной значением +выражения.

    +

    Например:

    -

    i := i + 1; // i 1

    +

    i := i + 1; // увеличивает значение переменной i на 1

    -

    PascalABC.NET - +

    В PascalABC.NET определены также операторы +присваивания со значками +=, -=, -*=, /=. - -. , - +=   *= - -+=, -= -*= - -. - .

    -

    +*=, /=. Для +числовых типов действие данных операторов описано +здесь. Кроме того, +использование операторов += и  *= для строк описано +здесь и операторов ++=, -= и +*= для множеств - +здесь. Их действие для +процедурных переменных описано здесь.

    +

    Операторы +=, -=, -*=, /= - : a #= b -a := a # b, # - - +*=, /= имеют +следующий смысл: a #= b означает +a := a # b, где # - +знак операции +, -, *, /.

    -

    :

    +

    Например:

    -

    a += 3; // a 3
    - b *= 2; // b 2

    +

    a += 3; // увеличить a на 3
    + b *= 2; // увеличить b в 2 раза

    -

    /= , - - .

    +

    Опертор /= неприменим, +если выражение слева - целое.

    -

    +

    Операторы +=, -=, -*=, /= - - .

    +*=, /= могут также использоваться со +свойствами +классов соответствующих типов в левой части.

    diff --git a/PABCNetHelp/LangGuide/Operators/assignext.html b/PABCNetHelp/LangGuide/Operators/assignext.html index b20af2681..0dfee52e7 100644 --- a/PABCNetHelp/LangGuide/Operators/assignext.html +++ b/PABCNetHelp/LangGuide/Operators/assignext.html @@ -7,41 +7,41 @@ -

    - : +

    Расширенные операторы присваивания

    +Расширенный оператор присваивания имеет вид:
    -

    op

    +

    переменная op выражение

    -

    op - +

    где op - один из значков расширенного присваивания +=, -=, *=, /=.

    -

    , -, , - .

    -

    - : a #= b -a := a # b, # - - +

    В качестве переменной может быть простая переменная, разыменованный +указатель, переменная с индексами или компонент переменной типа запись, а также +свойство класса.

    +

    Расширенные операторы присваивания имеют +следующий смысл: a #= b означает +a := a # b, где # - +знак операции +, -, *, /.

    -

    -. :

    +

    Расширенные операторы присваивания используются прежде всего для числовых +типов. Например:

    -

    a += 3; // a := a + 3; - a 3
    - b *= 2; // b := b * 2; - b 2

    +

    a += 3; // a := a + 3; - увеличить a на 3
    + b *= 2; // b := b * 2; - увеличить b в 2 раза

    -

    /= - - .

    +

    Оператор /= неприменим +если левый операнд - целый.

    -

    += *= -.

    -

    -+=, -= -*= -.

    -

    -+=, -= - .

    +

    Использование операторов += и *= для строк описано +здесь.

    +

    Использование операторов ++=, -= и +*= для множеств описано +здесь.

    +

    Действие операторов ++=, -= для +процедурных переменных описано здесь.

    diff --git a/PABCNetHelp/LangGuide/Operators/beginend.html b/PABCNetHelp/LangGuide/Operators/beginend.html index 5078095cd..bf5b1190f 100644 --- a/PABCNetHelp/LangGuide/Operators/beginend.html +++ b/PABCNetHelp/LangGuide/Operators/beginend.html @@ -4,9 +4,9 @@ - - - + + + @@ -14,24 +14,24 @@ -

    ()

    - - . :
    +

    Составной оператор (блок)

    +Составной оператор предназначен для объединения нескольких +операторов в один. Он имеет вид:

    begin

    операторы
    end

    - PascalABC.NET - . ( - , -; PascalABC.NET - , - ).

    ";". - begin -end, , - . +В PascalABC.NET составной оператор также +называется блоком. (традиционно в +Паскале блоком называется раздел описаний, после которого идет составной +оператор; в PascalABC.NET +принято другое решение, поскольку можно описывать переменные +непосредственно внутри составного оператора).

    Операторы отделяются один от другого символом ";". +Ключевые слова begin и +end, окаймляющие операторы, +называются операторными скобками.

    -

    :

    +

    Например:

    s := 0;
    p := 1;
    for var i:=1 to 10 do
    @@ -40,11 +40,11 @@   s := s + p

    end

    -

    end ";". - , end - , .

    -

    , -:

    +

    Перед end также может ставиться ";". +В этом случае считается, что последним оператором перед end +является пустой оператор, не выполняющий никаких действий.

    +

    Помимо операторов, в блоке могут быть внутриблочные описания +переменных:

    begin
    diff --git a/PABCNetHelp/LangGuide/Operators/break.html b/PABCNetHelp/LangGuide/Operators/break.html index ae2cbb3bc..71b28e224 100644 --- a/PABCNetHelp/LangGuide/Operators/break.html +++ b/PABCNetHelp/LangGuide/Operators/break.html @@ -12,32 +12,32 @@ -

    break, continue +

    Операторы break, continue и exit

    -

    break continue - .

    -

    break -. - , . continue , - . :

    +

    Операторы break и continue +используются только внутри циклов.

    +

    Оператор break предназначен для досрочного завершения +цикла. При его выполнении происходит немедленный выход из текущего цикла и +переход к выполнению оператора, следующего за циклом. Оператор continue завершает текущую итерацию цикла, +осуществляя переход к концу тела цикла. Например:

    flag := False;
    for var i:=1 to 10 do
    begin
      read(x);
      if x<0 then continue; // -
    + пропуск текущей итерации цикла
      if x=5 then
      begin
        flag := True;
    -    break; //
    +    break; // выход из цикла
      end
    end;

    -

    break continue - .

    -

    exit - .

    +

    Использование операторов break и continue +вне тела цикла ошибочно.

    +

    Оператор exit предназначен для досрочного завершения +процедуры или функции. Например

    function Analyze(x: integer): boolean;
    begin
    @@ -49,11 +49,11 @@ exit   ...
    end;

    -

    exit - .

    -

    , break, continue - exit -PascalABC.NET .

    +

    Вызов exit в разделе операторов +основной программы приводит к ее немедленному завершению.

    +

    Более точно, break, continueexit в +PascalABC.NET являются операторами вызова специальных внутренних процедур.

    diff --git a/PABCNetHelp/LangGuide/Operators/case.html b/PABCNetHelp/LangGuide/Operators/case.html index 83b664e39..389657faf 100644 --- a/PABCNetHelp/LangGuide/Operators/case.html +++ b/PABCNetHelp/LangGuide/Operators/case.html @@ -5,7 +5,7 @@ - + @@ -16,55 +16,55 @@ -

    -

    - , . - :

    +

    Оператор выбора

    +

    Оператор выбора выполняет одно действие из нескольких в зависимости от +значения некоторого выражения, называемого переключателем. Он имеет +следующий вид:

    -

    case +

    case переключатель of
    -
     
    1: - 1;
    +  
    список выбора 1: + оператор1;
      ...
    -  
    N: - N;
    -   else

    +  
    список выбора N: + операторN;
    +   else
    список операторов
    end;

    -

    - , - . - if, else -.

    -

    case . - , , - . - , else , - else , case - .

    -

    , - a..b ( a -b); -. :

    +

    Переключатель представляет собой выражение порядкового типа +или строкового типа, а списки выбора содержат константы совместимого +по присваиванию типа. Как и +в операторе if, ветка else может +отсутствовать.

    +

    Оператор case работает следующим образом. Если в одном из +списков выбора найдено текущее значение переключателя, то выполняется оператор, +соответствующий данному списку. Если же значение переключателя не найдено ни в +одном списке, то выполняется список операторов по ветке else или, +если ветка else отсутствует, оператор case +не выполняет никаких действий.

    +

    Список выбора состоит либо из одной константы, либо для перечислимого типа из диапазона значений +вида a..b (константа a должна быть меньше константы +b); можно также перечислить несколько констант или диапазонов через +запятую. Например:

    case Country of
    -   '': Capital := '';
    -   '': Capital := '';
    -   '': Capital := '';
      else Capital - := ' ';
    end;

    +   'Россия': Capital := 'Москва';
    +   'Франция': Capital := 'Париж';
    +   'Италия': Capital := 'Рим';
      else Capital + := 'Страна отсутствует в базе данных';
    end;

    case DayOfWeek of
    -   1..5: writeln(' ');
    -   6,7: writeln(' ');
    +   1..5: writeln('Будний день');
    +   6,7: writeln('Выходной день');
    end;

    -

    . ,

    +

    Списки выбора не должны пересекаться. Например, следующий фрагмент

    case i of
      2,5: write(1);
      4..6: write(2);
    end;

    -

    .

    +

    приведет к ошибке компиляции.

     

    diff --git a/PABCNetHelp/LangGuide/Operators/emptyop.html b/PABCNetHelp/LangGuide/Operators/emptyop.html index 76a47a038..a62ab1e88 100644 --- a/PABCNetHelp/LangGuide/Operators/emptyop.html +++ b/PABCNetHelp/LangGuide/Operators/emptyop.html @@ -2,7 +2,7 @@ - + @@ -10,23 +10,23 @@ -

    - , - : -

    1. - ";" -:

    +

    Пустой оператор

    +Пустой оператор не включает никаких символов, не выполняет +никаких действий и используется в двух случаях: +

    1. Для +использования символа ";" после последнего оператора в +блоке:

    begin
     
    a := 1;
      b := a;
    end

    - ";" - , , -";" . , ";" - end , . -

    2. , :

    +Поскольку в языке Паскаль символ ";" +разделяет операторы, то в приведенном выше коде считается, что после последней +";" находится пустой оператор. Таким образом, ";" +перед end в блоке можно либо ставить, либо нет. +

    2. Для пометки места, следующего за последним оператором в блоке:

    label a;
    begin
    diff --git a/PABCNetHelp/LangGuide/Operators/for.html b/PABCNetHelp/LangGuide/Operators/for.html index 510abc4ab..629171891 100644 --- a/PABCNetHelp/LangGuide/Operators/for.html +++ b/PABCNetHelp/LangGuide/Operators/for.html @@ -19,80 +19,80 @@ -

    for

    -

    for -:

    +

    Оператор цикла for

    +

    Оператор цикла for имеет одну из двух +форм:

    -

    for := - - to - do
    -  

    +

    for переменная := + начальное + значение to конечное + значение do
    +  
    оператор

    -

    +

    или

    -

    for := - - downto - do
    -  

    +

    for переменная := + начальное + значение downto конечное + значение do
    +  
    оператор

    -

    , - :

    +

    Кроме того, переменную можно описать непосредственно в +заголовке цикла:

    -

    for : := - to - downto - do
    -  

    +

    for переменная: тип := начальное + значение to или + downto конечное + значение do
    +  
    оператор

    -

    +

    или

    -

    for var := - - to - downto - do
    -  

    +

    for var переменная := + начальное + значение to или + downto конечное + значение do
    +  
    оператор

    -

    - . - , - . , - :

    +

    В последнем случае используется автоопределение типа +переменной по типу начального значения. В двух последних случаях область действия +объявленной переменной распространяется до конца тела цикла, которое в данном случае +образует неявный блок. Вне тела цикла такая переменная недоступна, поэтому +следующий цикл может использовать переменную с тем же именем:

    for var i := 1 to 10 do
      Print(i);
    for var i := 1 to 5 do
      Print(i*i);

    -

    , for :

    +

    Наконец, в заголовке цикла for можно указать шаг изменения цикла:

    -

    for var := - - to - step do
    -  

    +

    for var переменная := + начальное + значение to конечное + значение step значение do
    +  
    оператор

    -

    to.

    -

    step . -step , .

    -

    for do - , - do - . - for - . - to - - , , - downto - - . - - . - . .

    -

    - . - - - .

    -

    :

    +

    При наличии шага цикла разрешается использовать только направление to.

    +

    Шаг step может быть отрицательным. Если шаг +step равен нулю, возникает ошибка времени выполнения программы.

    +

    Текст от слова for до слова do +включительно называется заголовком цикла, а +оператор после do - телом цикла. +Переменная после слова for называется +параметром цикла. +Для первой формы цикла с ключевым словом to +параметр цикла меняется от начального значения до +конечного значения, увеличиваясь всякий раз на единицу, а для +второй формы ключевым словом downto - +уменьшаясь на единицу. Для каждого значения переменной-параметра +выполняется тело цикла. Однократное повторение тела цикла +называется итерацией цикла. Значение параметра цикла после завершения цикла считается неопределенным.

    +

    Переменная-параметр цикла может иметь любой порядковый тип. При этом начальное и +конечное значения должны быть +совместимы по присваиванию с переменной-параметром цикла.

    +

    Например:

    var en: (red,green,blue,white);
    ...
    @@ -101,17 +101,17 @@ step
    for var c := 'a' to 'z' step 2 do
      write(c);

    -

    for ... to - -  for ... -downto - , .

    -

    , -- . - PascalABC.NET .

    -

    - - . , -for :

    +

    Если для цикла for ... to +начальное значение переменной цикла больше конечного значения +или для цикла for ... +downto начальное значение переменной цикла +меньше конечного значения, то тело цикла не выполнится ни разу.

    +

    Если цикл используется в подпрограмме, то +переменная-параметр цикла должна быть описана как локальная. Наилучшим решением +в PascalABC.NET является описание переменной в заголовке цикла.

    +

    Изменение переменной-параметра цикла внутри цикла является +логической ошибкой. Например, следующий фрагмент со вложенным оператором +for является ошибочным:

    for i := 1 to 10 do
      i -= 1;

    diff --git a/PABCNetHelp/LangGuide/Operators/foreach.html b/PABCNetHelp/LangGuide/Operators/foreach.html index 1efd7f27f..783e8e322 100644 --- a/PABCNetHelp/LangGuide/Operators/foreach.html +++ b/PABCNetHelp/LangGuide/Operators/foreach.html @@ -12,52 +12,52 @@ -

    foreach

    -

    foreach -:

    +

    Оператор цикла foreach

    +

    Оператор цикла foreach имеет одну из следующих +форм:

    -

    foreach - in [index - ] do
    -  

    +

    foreach переменная + in контейнер [index + переменная] do
    +  
    оператор

    -

    +

    или

    -

    foreach : - in - [index ] +

    foreach переменная: + тип in контейнер + [index переменная] do
    -  

    +   оператор

    -

    +

    или

    -

    foreach var in - [index ] +

    foreach var переменная in контейнер + [index переменная] do
    -  

    +   оператор

    -

    , -, , , -IEnumerable -IEnumerable<T>(, List<T>, -Dictionary<Key,Value> ..). - , -( -IEnumerable, object). -foreach -.

    -

    -index , - ( ).

    -

    - - . - , .. -.

    -

    :

    +

    В качестве контейнера может фигурировать динамический массив, +строка, множество, а также любой контейнер, удовлетворяющий интерфейсу +IEnumerable или +IEnumerable<T>(например, List<T>, +Dictionary<Key,Value> и т.д.). Переменная цикла +должна иметь тип, совпадающий с типом элементов контейнера +(если контейнер удовлетворяет интерфейсу +IEnumerable, то это тип object). В последней форме +foreach тип переменной цикла автовыводится по типу элементов +контейнера.

    +

    Необязательная часть +index переменная вводит переменную, которая хранит на +каждой итерации индекс элемента контейнера (элементы индексируются с нуля).

    +

    Переменная цикла пробегает все +значения элементов контейнера и для каждого значения переменной +цикла выполняется тело цикла. Изменение переменной цикла +внутри тела цикла не меняет элементы контейнера, т.е. они доступны только на +чтение.

    +

    Например:

    var
    -  ss: set of string := ['','',''];
    +  ss: set of string := ['Иванов','Петров','Сидоров'];
      a: array of integer := (3,4,5);
      b: array [1..5] of integer := (1,3,5,7,9);
      l := new List<real>;
    diff --git a/PABCNetHelp/LangGuide/Operators/goto.html b/PABCNetHelp/LangGuide/Operators/goto.html index 650ae331e..9c34bfad7 100644 --- a/PABCNetHelp/LangGuide/Operators/goto.html +++ b/PABCNetHelp/LangGuide/Operators/goto.html @@ -11,26 +11,26 @@ -

    goto

    - goto :
    +

    Оператор безусловного перехода goto

    +Оператор безусловного перехода goto имеет следующую форму:

    goto -

    + метка

    -

    , -.

    -

    . - , -:

    +

    Он переносит выполнение программы к оператору, помеченному меткой +метка.

    +

    Метка представляет собой идентификатор или целое без знака. Чтобы пометить +оператор меткой, необходимо перед оператором указать метку с последующим +двоеточием:

    label1: -

    + оператор

    -

    +

    Метки должны быть описаны в разделе меток с использованием служебного слова label:

    label 1,2,3;

    -

    ,

    +

    Например, в результате выполнения программы

    label 1,2;
    begin
      var i := 5;
    @@ -41,21 +41,21 @@ 1:
    end.

    -

    543210.

    -

    , . - .

    -

    , - . , .

    -

    - . -goto -: break -- , , exit - , +

    будет выведено 543210.

    +

    Метка должна помечать оператор в том же блоке, в котором описана. Метка не +может помечать несколько операторов.

    +

    Переход на метку может осуществляться либо на оператор в том же блоке, либо +на оператор в объемлющей конструкции. Так, запрещается извне цикла переходить на метку внутри цикла.

    +

    Использование оператора безусловного перехода в программе считается признаком +плохого стиля программирования. Для основных вариантов использования +goto в язык Паскаль введены специальные +процедуры: break +- переход на оператор, следующий за циклом, exit - переход за последний оператор процедуры, continue -- .

    -

    goto   - . -, k - :

    +- переход за последний оператор в теле цикла.

    +

    Один из немногих примеров уместного использования оператора goto в программе  - выход из нескольких вложенных циклов одновременно. +Например, при поиске элемента k в +двумерном массиве:

    var a: array [1..10,1..10] of integer;
    ...
    diff --git a/PABCNetHelp/LangGuide/Operators/if.html b/PABCNetHelp/LangGuide/Operators/if.html index 85ee0ad6b..3392e6469 100644 --- a/PABCNetHelp/LangGuide/Operators/if.html +++ b/PABCNetHelp/LangGuide/Operators/if.html @@ -12,52 +12,52 @@ -

    -

    . +

    Условный оператор

    +

    Условный оператор имеет полную и краткую формы.

    -

    -:

    +

    Полная форма условного оператора выглядит следующим +образом:

    -

    if then - 1
    - else 2

    +

    if условие then + оператор1
    + else оператор2

    - . -, 1, - 2.

    - :

    +В качестве условия указывается некоторое логическое выражение. Если условие оказывается +истинным, то выполняется оператор1, в противном +случае выполняется оператор2.

    +Краткая форма условного оператора имеет вид:

    -

    if then -

    +

    if условие then + оператор

    -

    , -, -.

    -

    +

    Если условие оказывается истинным, то выполняется +оператор, в противном случае происходит переход к следующему оператору +программы.

    +

    В случае конструкции вида

    -

    if 1 +

    if условие1 then
    -   if
    2 - then 1
    +   if
    условие2 + then оператор1
      else - 2

    + оператор2

    -

    else - if, else - . , -else -if, - :

    +

    else всегда относится к ближайшему +предыдущему оператору if, для которого ветка else +еще не указана. Если в предыдущем примере требуется, чтобы +else относилась к первому оператору +if, то необходимо использовать +составной оператор:

    -

    if 1 +

    if условие1 then
    begin

    -   if
    2 - then 1
    +   if
    условие2 + then оператор1
    end
    - else 2

    + else оператор2

    -

    :

    +

    Например:

    if a<b then
      min := a
    diff --git a/PABCNetHelp/LangGuide/Operators/index_statements.html b/PABCNetHelp/LangGuide/Operators/index_statements.html index c0e528087..aeb8d5522 100644 --- a/PABCNetHelp/LangGuide/Operators/index_statements.html +++ b/PABCNetHelp/LangGuide/Operators/index_statements.html @@ -2,48 +2,48 @@ -: +Операторы: обзор -

    :

    -

    PascalABC.NET .

    +

    Операторы: обзор

    +

    В PascalABC.NET определены следующие операторы.

    + diff --git a/PABCNetHelp/LangGuide/Operators/lock.html b/PABCNetHelp/LangGuide/Operators/lock.html index ad3cb2eff..ce2c30cd5 100644 --- a/PABCNetHelp/LangGuide/Operators/lock.html +++ b/PABCNetHelp/LangGuide/Operators/lock.html @@ -10,25 +10,25 @@ -

    lock

    - lock :
    -

    lock do

    +

    Оператор lock

    +Оператор lock имеет вид:
    +

    lock объект do
    оператор

    -

    .

    -

    lock , - . , -, lock, - . -, , - -. , - .

    -

    +

    Объект обязательно принадлежит к ссылочному типу.

    +

    Оператор lock гарантирует, что оператор будет +выполняться только одним потоком. Объект здесь хранит блокировку, а +оператор, представляющий собой тело оператора lock, +называется блоком синхронизации. После того как первый поток заходит в блок +синхронизации, он блокирует объект, при выходе из блока синхронизации - +разблокирует. Если объект заблокирован, то никакой другой поток не может +зайти в блок синхронизации и приостанавливается до разблокировки объекта.

    +

    Оператор

    lock obj do
      oper;

    -

    :

    +

    полностью эквивалентен следующему участку кода:

    Monitor.Enter(obj);
    try
    diff --git a/PABCNetHelp/LangGuide/Operators/loop.html b/PABCNetHelp/LangGuide/Operators/loop.html index 8e67d033c..72e3a0f97 100644 --- a/PABCNetHelp/LangGuide/Operators/loop.html +++ b/PABCNetHelp/LangGuide/Operators/loop.html @@ -11,16 +11,16 @@ -

    loop

    -

    loop :

    +

    Оператор цикла loop

    +

    Оператор цикла loop имеет форму:

    -

    loop do
    -  

    +

    loop выражение do
    +  
    оператор

    -

    -. <= 0 , .

    -

    loop , - :

    +

    Выражение должно быть целого типа и указывает количество повторений тела +цикла. Если значение выражения <= 0 , то тело цикла не выполняется ни разу.

    +

    Цикл loop используется в простых ситуациях, когда тело +цикла не зависит от номера итерации цикла:

    loop 5 do
      Print(1);
    var x := 1;
    loop 5 do
    diff --git a/PABCNetHelp/LangGuide/Operators/plusequal.html b/PABCNetHelp/LangGuide/Operators/plusequal.html index 98374b253..25aca5650 100644 --- a/PABCNetHelp/LangGuide/Operators/plusequal.html +++ b/PABCNetHelp/LangGuide/Operators/plusequal.html @@ -12,11 +12,11 @@ -

    += -=

    -

    += - , -= -- . . -:

    +

    Операторы += и -= для процедурных переменных

    +

    Оператор присваивания += предназначен +для присоединения к процедурной переменной процедуры, оператор присваивания -= +- для отсоединения. Подпрограммы вызываются в порядке присоединения. +Например:

    procedure mult2(var r: real);
    begin
      r := 2 * r;
    end;

    @@ -34,15 +34,15 @@   p(r); // r := r + 3; 
    end.

    -

    - .

    -

    , / - . . - .

    -

    += --= -/ .NET. -:

    +

    Отсоединение не присоединенных подпрограмм не выполняет +никаких действий.

    +

    Кроме того, к процедурной переменной можно прикреплять/откреплять +статические и экземплярные методы классов. Пример см. в теме +процедурные переменные.

    +

    Операторы += и +-= используются также для +добавления/удаления обработчиков для событий .NET. +Например:

    procedure OnTimer1(sender: object; e: System.Timers.ElapsedEventArgs);
    diff --git a/PABCNetHelp/LangGuide/Operators/proccall.html b/PABCNetHelp/LangGuide/Operators/proccall.html index 07e8bc12c..af5f5f0ed 100644 --- a/PABCNetHelp/LangGuide/Operators/proccall.html +++ b/PABCNetHelp/LangGuide/Operators/proccall.html @@ -7,26 +7,26 @@ -

    - :
    -

    +

    Оператор вызова процедуры

    +Оператор вызова процедуры имеет вид:
    +

    имя процедуры

    -

    +

    или

    -

    ( - )

    +

    имя процедуры(список + фактических параметров)

    -

    - , - ( - -). -, , - , , - , - .

    -

    -, .

    +

    Количество фактических параметров должно совпадать с +количеством формальных, а типы фактических параметров должны +соответствовать типам соответствующих формальных (исключение составляют +подпрограммы с параметрами по умолчанию и подпрограммы с переменным числом +параметров). Фактические +параметры, передаваемые по значению, должны быть совместимы по присваиванию с +соответствующими формальными параметрами, типы фактических параметров, +передаваемых по ссылке, должны быть эквивалентны типам соответствующих +формальных параметров.

    +

    Функцию можно вызывать как +процедуру, возвращаемое значение про этом игнорируется.

    diff --git a/PABCNetHelp/LangGuide/Operators/raise.html b/PABCNetHelp/LangGuide/Operators/raise.html index d095db42d..05d6c3e5c 100644 --- a/PABCNetHelp/LangGuide/Operators/raise.html +++ b/PABCNetHelp/LangGuide/Operators/raise.html @@ -10,24 +10,24 @@ -

    raise

    -

    raise - :

    +

    Оператор raise

    +

    Оператор raise +предназначен для возбуждения исключения и имеет вид:

    -

    raise

    +

    raise объект

    -

    -- , Exception. -:

    +

    Здесь объект +- объект класса, производного от Exception. +Например:

    -

    raise new Exception('');

    +

    raise new Exception('Ошибка');

    -

    - .  +

    При возбуждении специфического исключения желательно +определить свой тип исключения

    -

    except - raise -:

    +

    Для повторной генерации исключения внутри секции except +используется также вызов raise без +параметров:

    raise;

    diff --git a/PABCNetHelp/LangGuide/Operators/repeat.html b/PABCNetHelp/LangGuide/Operators/repeat.html index 164c242fc..f33def99e 100644 --- a/PABCNetHelp/LangGuide/Operators/repeat.html +++ b/PABCNetHelp/LangGuide/Operators/repeat.html @@ -11,26 +11,26 @@ -

    repeat

    -

    - repeat :
    +

    Оператор цикла repeat

    +

    Старое

    +Оператор цикла repeat имеет следующую форму:

    repeat
    -
     

    -
    until

    +  
    операторы
    +
    until условие

    -

    while, - , , . - , , repeat, - .

    -

    repeat , - , . :

    +

    В отличие от цикла while, +условие вычисляется после очередной итерации цикла, и если оно истинно, то происходит выход из цикла. +Таким образом, операторы, образующие тело цикла оператора repeat, +выполняются по крайней мере один раз.

    +

    Обычно оператор repeat используют в ситуациях, где +условие нельзя проверить, не выполнив тело цикла. Например:

    repeat
      read(x);
    until x=0;

    -

    , -:

    +

    Если условие всегда оказывается ложным, то может произойти +зацикливание:

    repeat
      write(1);
    diff --git a/PABCNetHelp/LangGuide/Operators/try_except.html b/PABCNetHelp/LangGuide/Operators/try_except.html index dc25f6d23..149ee175a 100644 --- a/PABCNetHelp/LangGuide/Operators/try_except.html +++ b/PABCNetHelp/LangGuide/Operators/try_except.html @@ -12,67 +12,67 @@ -

    try ... except

    -

    try ... except :

    +

    Оператор try ... except

    +

    Оператор try ... except имеет вид:

    try
    -  
     
    +  
      операторы
    except
    -  
     
    +  
      блок обработки исключений
    end;

    -

    try - . - , - except. - except, - , try ... -except ... end. - try, - except. - try , - . , try - , except - .

    -

    ( -except) , - except , - - try. , - .

    -

    - -, , -

    +

    Блок try называется +защищаемым блоком. +Если при выполнении программы в нем происходит ошибка, то он завершается и +выполнение передается блоку except. Если исключение +обрабатывается в блоке except, то после его обработки +программа продолжает выполняться с оператора, следующего за try ... +except ... end. Если исключение остается необработанным и имеется объемлющий +блок try, то выполнение передается +его блоку except. Если объемлющего +блока try нет, то программа +завершается с ошибкой. Наконец, если в блоке try +ошибки не произошло, то блок except +игнорируется и выполнение программы продолжается дальше.

    +

    Если в процессе обработки исключения (в блоке +except) произошло другое исключение, то текущий +блок except завершается, первое +исключение считается необработанным и обработка нового исключения передается +объемлющему блоку try. Таким образом, +в каждый момент времени существует максимум одно необработанное исключение.

    +

    Блок обработки + исключений представляет собой либо последовательность +операторов, разделенных точкой с запятой, либо последовательность обработчиков +исключений вида

    -

    on : do

    +

    on имя: тип do оператор

    -

    ';', - ';'. - - -( Exception), - - ( -). - except. - ( - ), -, , - - try. - on else, - , -.

    -

    , - , .. -.

    -

    -: , - . - , - ( - ). - Exception - .

    -

    .

    +

    Обработчики разделяются символом ';', +после последнего обработчика также может следовать символ ';'. +Здесь тип - тип исключения +(должен быть производным от стандартного типа Exception), +имя - имя переменной исключения (имя с последующим двоеточием может быть +опущено). В первом случае при обработке исключения выполняются все операторы из +блока except. Во втором случае среди +обработчиков осуществляется поиск типа текущего исключения (обработчики +перебираются последовательно от первого до последнего), и если обработчик +найден, то выполняется соответствующий оператор обработки исключения, в +противном случае исключение считается необработанным и передается объемлющему +блоку try. В последнем случае после всех +обработчиков on может идти ветвь else, +которая обязательно обработает исключение, если ни один из обработчиков не +выполнился.

    +

    Следует обратить внимание, что имя переменной исключения в +разных обработчиках может быть одинаковым, т.е. оно локально по отношению к +обработчику.

    +

    Поиск типа исключения в обработчиках производится с учетом +наследования: исключение будет обработано, если оно принадлежит к указанному в +обработчике типу или производному от него. Поэтому принято записывать вначале +обработчики производных классов, а затем - обработчики базовых (в противном +случае обработчик исключения производного класса никогда не сработает). +Обработчик исключения Exception обрабатывает +все возможные исключения и поэтому должен быть записан последним.

    +

    Пример.

    var a: array [1..10] of integer;
    try

    @@ -82,13 +82,13 @@   ...
    except
      on System.DivideByZeroException do
    -    writeln(' 0'); 
    +    writeln('Деление на 0'); 
      on e: System.IndexOutOfRangeException do
        writeln(e.Message);
      on System.FormatException do
    -    writeln(' ');
    -   else writeln('- - ');
    +    writeln('Неверный формат ввода');
    +   else writeln('Какое-то другое + исключение');
    end;

     

    diff --git a/PABCNetHelp/LangGuide/Operators/try_finally.html b/PABCNetHelp/LangGuide/Operators/try_finally.html index d33fbf395..8ea659e26 100644 --- a/PABCNetHelp/LangGuide/Operators/try_finally.html +++ b/PABCNetHelp/LangGuide/Operators/try_finally.html @@ -11,23 +11,23 @@ -

    try +

    Оператор try ... finally

    -

    try ... finally :

    +

    Оператор try ... finally имеет вид:

    try
    -  

    +   операторы
    finally
    -  
    +   операторы
    end;

    -

    finally - , - try. - .

    -

    finally - .

    -

    1. .

    +

    Операторы в блоке finally +выполняются безотносительно к тому, возникло или нет исключение +в блоке try. При этом само исключение +не обрабатывается.

    +

    Блок finally +используется для возвращения ранее выделенных ресурсов.

    +

    Пример 1. Закрытие открытого файла.

    reset(f);
    try

    @@ -37,9 +37,9 @@
    end;

    -

    , - try.

    -

    2. .

    +

    Файл будет закрыт независимо от того, произошло ли ислючение +в блоке try.

    +

    Пример 2. Возвращение выделенной динамической памяти.

    New(p);
    try
    @@ -48,8 +48,8 @@   Dispose(p);
    end;

    -

    , p, - , +

    Динамическая память, контролируемая указателем p, +будет возвращена независимо от того, произошло ли ислючение в блоке try.

    diff --git a/PABCNetHelp/LangGuide/Operators/var_statement.html b/PABCNetHelp/LangGuide/Operators/var_statement.html index 6e35b35c6..e027b29f7 100644 --- a/PABCNetHelp/LangGuide/Operators/var_statement.html +++ b/PABCNetHelp/LangGuide/Operators/var_statement.html @@ -2,9 +2,9 @@ - - - + + + @@ -12,31 +12,31 @@ -

    -

    PascalABC.NET - begin-end - . .

    -

    :

    +

    Оператор описания переменной

    +

    В PascalABC.NET можно описывать переменные внутри +составного оператора begin-end в +специальном операторе описания переменной. Такие описания называются внутриблочными.

    +

    Внутриблочное описание имеет одну из форм:

    - var : - ;
    -

    + var список имен: + тип;
    +

    или

    - var : - := ; + var имя: + тип := выражение;
    -

    +

    или

    - var : - = ; -// Delphi + var имя: + тип = выражение; +// Для совместимости с Delphi
    -

    +

    или

    - var := - ; + var имя := + выражение;
    -

    . :

    +

    Имена в списке перечисляются через запятую. Например:

    begin
      var
    a1,a2,a3: integer;
      var n: real := 5; 
    @@ -44,43 +44,43 @@  
    ...
    end
    .
    -

    - . - . :

    +

    В последнем случае тип переменной автовыводится по типу +выражения в правой части. Автовыведение типа активно используется при +инициализации переменной вызовом конструктора или функции. возвращающей объект:

    begin
      var
    l := new List<integer>;
      var a := - Seq(1,3,5); // a Seq: array of + Seq(1,3,5); // тип a выводится по типу возвращаемого значения Seq: array of integer
    end.
    -

    -

    ( ) :

    +

    Кортежное присваивание с описанием переменных

    +

    Кортежное присваивание (распаковку кортежа в переменные) можно совмещать с описанием переменных:

    var t := (1,2);
    (var a, var b) := (1,2);
    -

    +

    или

    var (a,b) := (1,2);
    -

    -:

    +

    Распаковка кортежа в переменные часто используется при возвращении функцией +кортежа:

    function SP(a,b: real) := (a*b,2*(a+b));  
    ...
    var (S,P) := SP(2,3);
    -

    -

    -

    --:

    +

    Инициализация лямбда-выражением

    +

    Автовыведение типа при описании невозможно при инициализации переменной +лямбда-выражением:

    - // var f := x -> x*x; // !
    var + // var f := x -> x*x; // так нельзя!
    var f : Func<integer,integer> := x -> x*x;
    -

    - . , - -. .

    +

    Внутриблочные описания используются чтобы не захламлять раздел описаний +описанием вспомогательных переменных. Кроме этого, внутриблочные описания +позволяют вводить переменные именно в тот момент когда они впервые +потребовались. Оба этих фактора существенно повышают читаемость программы.

    diff --git a/PABCNetHelp/LangGuide/Operators/while.html b/PABCNetHelp/LangGuide/Operators/while.html index 9f1959d10..8a6844277 100644 --- a/PABCNetHelp/LangGuide/Operators/while.html +++ b/PABCNetHelp/LangGuide/Operators/while.html @@ -13,44 +13,44 @@ -

    while repeat

    - -while :
    -

    while do
    -  

    +

    Операторы цикла while и repeat

    +Оператор цикла +while имеет следующую форму:
    +

    while условие do
    +  
    оператор

    -

    - , do - . - , , , - .

    -

    , -:

    +

    Условие представляет собой +выражение логического типа, а оператор после do +называется телом цикла. Перед каждой итерацией цикла +условие вычисляется, и если оно истинно, то выполняется тело цикла, в противном +случае происходит выход из цикла.

    +

    Если условие всегда оказывается истинным, то может произойти +зацикливание:

    while 2>1 do
      write(1);

    -

    repeat : +

    Оператор цикла repeat имеет следующую форму:

    repeat
    -
     

    -
    until

    +
     
    операторы
    +
    until условие

    -

    while, - , , . - , , repeat, - .

    -

    repeat , - , . :

    +

    В отличие от цикла while, +условие вычисляется после очередной итерации цикла, и если оно истинно, то происходит выход из цикла. +Таким образом, операторы, образующие тело цикла оператора repeat, +выполняются по крайней мере один раз.

    +

    Обычно оператор repeat используют в ситуациях, где +условие нельзя проверить, не выполнив тело цикла. Например:

    repeat
      read(x);
    until x=0;

    -

    , -:

    +

    Если условие всегда оказывается ложным, то может произойти +зацикливание:

    repeat
      write(1);
    diff --git a/PABCNetHelp/LangGuide/Operators/with.html b/PABCNetHelp/LangGuide/Operators/with.html index 03f9e512b..d601e1722 100644 --- a/PABCNetHelp/LangGuide/Operators/with.html +++ b/PABCNetHelp/LangGuide/Operators/with.html @@ -14,21 +14,21 @@ -

    with

    - with - , , . :
    -

    with - do -

    +

    Оператор with

    +Оператор with позволяет сократить обращение +к полям записи, а также к полям, методам и свойствам объекта. Он имеет вид:
    +

    with имя + записи или объекта do + оператор

    -

    -

    with do -

    +

    или

    +

    with список имен do + оператор

    -

    - , - . , -

    +

    Всюду внутри оператора можно опускать имя записи при +обращении к полю указанной записи или имя объекта при обращении к полю, методу +или свойству указанного объекта. Например, пусть описана +переменная

    var
      DateOfBirthday = record
    @@ -37,15 +37,15 @@     Year: Integer;
      end;

    -

    - with :

    +

    Тогда присваивание значений ее полям без использования +оператора with имеет вид:

    DateOfBirthday.Day := 23;
    DateOfBirthday.Month := 2;
    DateOfBirthday.Year := 1965;

    -

    with - :

    +

    Использование оператора with позволяет сократить +предыдущую запись:

    with DateOfBirthday do
    begin
    @@ -54,13 +54,13 @@   Year := 1965;
    end;

    -

    , (, ), - (, ). -with - with, - with .. -with   , - . ,

    +

    Если внешняя переменная имеет то же имя, что и поле (метод, свойство), то +предпочтение отдается полю (методу, свойству). При наличии вложенных операторов +with вначале предпринимается попытка рассматривать переменную как поле записи +или объекта самого внутреннего оператора with, затем непосредственно объемлющего +его оператора with и т.д. Если оператор +with  содержит список объектов, +то они рассматривается справа налево. Например, если имеются описания

    var
      x,y,z: integer;
    @@ -70,14 +70,14 @@   b: record
           x: integer;
         end;

    -

    +

    то фрагмент программы

    with a,b do
    begin
      x := 1;
      y := 2;
      z := 3; 
    end;
    -

    +

    эквивалентен фрагменту

    with a do
     with b do
     begin
    @@ -85,12 +85,12 @@    y := 2;
       z := 3; 
     end;
    -

    +

    а также фрагменту

    b.x:=1;
    a.y:=2;
    z:=3;

    -

    with .

    +

    Оператор with устарел и сейчас практически не используется.

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Operators/yield.html b/PABCNetHelp/LangGuide/Operators/yield.html index 0bc675fed..ec9637f9f 100644 --- a/PABCNetHelp/LangGuide/Operators/yield.html +++ b/PABCNetHelp/LangGuide/Operators/yield.html @@ -3,8 +3,8 @@ - - + + @@ -12,17 +12,17 @@ -

    yield

    -

    yield , , - :

    +

    Оператор yield

    +

    Оператор yield используется в функциях, генерирующих последовательности, и +имеет вид:

    -

    yield

    +

    yield выражение

    -

    , yield, . - -yield, , , - yield, .

    -

    :

    +

    Функция, содержащая yieldы, называется итератором. При каждом вызове +такая функция выполняет код до следующего +yieldа, после чего заканчивает свою работу, возвращая значение выражения, +указанного в yieldе, и сохраняет своё состояние до следующего вызова.

    +

    Например:

    function Squares(n: integer): sequence of integer;
    begin
      for var @@ -32,17 +32,17 @@ yield var x in q do
        Print(x);
      Println;

      q.Println;
    end.

    -

    q -, .. n , - foreach q, - Println q. - yield Squares.

    -

    yield -i*i, - . - , .

    -

    yield . -, yield . :

    +

    В данном примере переменная q хранит +последовательность, т.е. алгоритм вычисления квадратов первых n чисел, +который будет запущен либо в цикле foreach по последовательности q, либо вызовом +метода расширения Println для последовательности q. Данные последовательности +поочередно возвращаются вызовами оператора yield в теле функции Squares.

    +

    После каждого вызова оперматора yield функция возвращает следующее значение +i*i, заканчивает свою работу и сохраняет значения всех своих переменных во +внутреннем контексте. При следующем вызове этой функции её тело как бы начинает +выполняться с той точки, в которой мы оказались в конце предыдущего вызова.

    +

    В выражении yield могут фигурировать внешние относительно функции переменные. +Говорят, что оператор yield осуществляет захват таких переменных. Например:

    var a := 2;

    function Squares(n: integer): sequence of integer;
    begin
      @@ -51,30 +51,30 @@ i*i, var q := Squares(5);

      q.Println;
      a := 3;
      q.Println;
    end.

    -

    yield a . - : a - -, - a. - :

    +

    В данном коде оператор yield захватывает переменную a из внешнего контекста. +Захват производится по ссылке: если изменить переменную a в основной программе и +повторно вызвать функцию-итератор, то при генерации последовательности будет +использовано измененное значение переменной a. В итоге вывод данной программы +будет иметь вид:

    2 4 6 8 10
    3 6 9 12 15

    -

    , yield, :

    +

    Для функций, в теле которых присутствуют yield, имеется ряд ограничений:

      -
    1. , yield, .
    2. -
    3. - const, var, - params- .
    4. -
    5. yield, - Result, .
    6. -
    7. yield lock, try...except, +
    8. Функции, содержащие yield, могут возвращать только последовательности.
    9. +
    10. Среди параметров функций-итераторов не может быть const, var, + params-параметров и параметров по умолчанию.
    11. +
    12. Если функция использует yield, в ней запрещено использовать переменную + Result, и наоборот.
    13. +
    14. Функции с yield не могут содержать операторы lock, try...except, try..finally.
    15. -
    16. Yield with.
    17. -
    18. Yield -.
    19. -
    20. yield - .
    21. -
    22. yield
    23. -
    24. yield .
    25. +
    26. Yield не может быть вложена в оператор with.
    27. +
    28. Yield не может быть использована внутри лямбда-выражений.
    29. +
    30. Функции с yield не могут содержать вложенные подпрограммы и сами быть + вложенными подпрограммами.
    31. +
    32. Функции с yield не могут содержать локальные определения типов
    33. +
    34. Методы расширения с yield не могут быть рекурсивными.
    diff --git a/PABCNetHelp/LangGuide/Operators/yieldsequence.html b/PABCNetHelp/LangGuide/Operators/yieldsequence.html index 5a8b7435d..449e8af75 100644 --- a/PABCNetHelp/LangGuide/Operators/yieldsequence.html +++ b/PABCNetHelp/LangGuide/Operators/yieldsequence.html @@ -10,29 +10,29 @@ -

    yield sequence

    -

    yield sequence , , - yield, - :

    +

    Оператор yield sequence

    +

    Оператор yield sequence используется в функциях, генерирующих последовательности, +вместе с оператором yield, и +имеет вид:

    -

    yield sequence

    +

    yield sequence выражение

    -

    yield, yield -sequence , - -. -, :

    +

    В отличие от оператора yield, оператор yield +sequence перебирает элементы последовательности, указанной в выражении и +возвращает эти элементы в качестве значений основной функции-итератора. +Например, следующий код:

    function f: sequence of real;
    begin
      yield sequence Seq(1,2,3);
      yield 4;
    end;

    begin
      f.Println;
    end.

    -

    +

    выведет последовательность

    1 2 3 4

    -

    - :

    +

    Следующий пример иллюстрирует формирование последовательности элементов при +обходе бинарного дерева в инфиксном порядке:

    function InfixPrintTree<T>(root: Node<T>): sequence of T;
    begin
      if @@ -41,8 +41,8 @@ sequence root.data;
      yield sequence InfixPrintTree(root.right);
    end;

    -

    , yield sequence, -, yield.

    +

    Для функций, в теле которых присутствуют yield sequence, действуют те же +ограничения, что и для функций с yield.

    diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Common subroutines for files.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Common subroutines for files.html index 51fb1dfcc..27f70fc94 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Common subroutines for files.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Common subroutines for files.html @@ -7,20 +7,20 @@
    -

    - - - - - - - +

    Общие подпрограммы для работы с файлами

    +
    procedure Assign(f: ; fileName: string); -
            
    procedure AssignFile(f: ; fileName: string); -
            
    procedure Close(f: ); -
            
    procedure CloseFile(f: ); -
            
    function Eof(f: ): boolean; -
             True,
    procedure Erase(f: ); -
             ,
    procedure Rename(f: ; newname: string); -
             , , newname.
    + + + + + +
    procedure Assign(f: файл; fileName: string); +
            Связывает файловую переменную с файлом на диске
    procedure AssignFile(f: файл; fileName: string); +
            Связывает файловую переменную с файлом на диске
    procedure Close(f: файл); +
            Закрывает файл
    procedure CloseFile(f: файл); +
            Закрывает файл
    function Eof(f: файл): boolean; +
            Возвращает True, если достигнут конец файла
    procedure Erase(f: файл); +
            Удаляет файл, связанный с файловой переменной
    procedure Rename(f: файл; newname: string); +
            Переименовывает файл, связаный с файловой переменной, давая ему имя newname.
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Common subroutines.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Common subroutines.html index d2c82a3d7..d9c56b237 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Common subroutines.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Common subroutines.html @@ -15,54 +15,54 @@ -

    +

    Общие подпрограммы

    +
            Возвращает True, если значение val находится между a и b независимо от порядка a и b +
            Ограничивает значение x диапазоном [bottom, top] +
            Возвращает список аргументов командой строки, с которыми была запущена программа +
            Уменьшает значение переменной i на 1 - - +
            Уменьшает значение переменной i на n + + +
            Возвращает True, если достигнут конец потока ввода +
            Возвращает True, если достигнут конец строки +
            Увеличивает значение переменной i на 1 - - +
            Увеличивает значение переменной i на n + + +
            Возвращает True, если значение val находится между a и b включительно - - - - +
            Преобразует объект в строковое представление + + + + +
            Пропускает пробельные символы, после чего возвращает True, если достигнут конец потока ввода - - +
            Пропускает пробельные символы, после чего возвращает True, если достигнут конец строки + + +
            Обменивает местами значения двух переменных
    function Between<T>(val, a, b: T; inclusive: boolean := true): boolean; where T: IComparable<T>; -
             True, val a b a b
    function Clamp<T>(x,bottom,top: T): T; where T: IComparable<T>; -
             x [bottom, top]
    function CommandLineArgs: array of string; -
             ,
    procedure Dec(var i: integer); -
             i 1
    procedure Dec(var i: integer; n: integer); -
             i n
    procedure Dec(var e: ); -
             1
    procedure Dec(var e: ; n: integer); -
             n
    procedure Dec(var e: перечислимый тип); +
            Уменьшает значение перечислимого типа на 1
    procedure Dec(var e: перечислимый тип; n: integer); +
            Уменьшает значение перечислимого типа на n
    function Eof: boolean; -
             True,
    function Eoln: boolean; -
             True,
    procedure Inc(var i: integer); -
             i 1
    procedure Inc(var i: integer; n: integer); -
             i n
    procedure Inc(var e: ); -
             1
    procedure Inc(var e: ; n: integer); -
             n
    procedure Inc(var e: перечислимый тип); +
            Увеличивает значение перечислимого типа на 1
    procedure Inc(var e: перечислимый тип; n: integer); +
            Увеличивает значение перечислимого типа на n
    function InRange<T>(val, a, b: T): boolean; where T: IComparable<T>; -
             True, val a b
    function ObjectToString(obj: object): string; -
            
    function Ord(a: ): ; -
             a
    function Ord(a: ): integer; -
             a
    function Pred(x: ): ; -
             x
    function Pred(x: ): ; -
             x
    function Ord(a: целое): целое; +
            Возвращает порядковый номер значения a
    function Ord(a: перечислимый тип): integer; +
            Возвращает порядковый номер значения a
    function Pred(x: целое): целое; +
            Возвращает предшествующее x значение
    function Pred(x: перечислимый тип): перечислимый тип; +
            Возвращает предшествующее x значение
    function SeekEof: boolean; -
             , True,
    function SeekEoln: boolean; -
             , True,
    function Succ(x: ): ; -
             x
    function Succ(x: ): ; -
             x
    function Succ(x: целое): целое; +
            Возвращает следующее за x значение
    function Succ(x: перечислимый тип): перечислимый тип; +
            Возвращает следующее за x значение
    procedure Swap<T>(var a, b: T); -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for BigInteger.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for BigInteger.html index dc06883cd..0e2d0f538 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for BigInteger.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for BigInteger.html @@ -1,8 +1,8 @@ -

    BigInteger

    +

    Методы расширения типа BigInteger

    +
            Возвращает квадратный корень числа
    function Sqrt(Self: BigInteger): real; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Complex.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Complex.html index 6a6dd2101..01db49fbf 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Complex.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Complex.html @@ -1,8 +1,8 @@ -

    Complex

    +

    Методы расширения типа Complex

    +
            Возвращает комплексно сопряженное значение
    function Conjugate(Self: Complex): Complex; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Func.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Func.html index 3d28b3598..9da453365 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Func.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Func.html @@ -1,8 +1,8 @@ -

    Func

    +

    Методы расширения типа Func

    +
            Суперпозиция функций
    function Compose<T1, T2, TResult>(Self: T2->TResult; composer: T1->T2): T1->TResult; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for IDictionary.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for IDictionary.html index 3f73c528d..c50665125 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for IDictionary.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for IDictionary.html @@ -6,34 +6,34 @@ -

    +

    Методы расширения словарей

    +
            Возвращает словарь, сопоставляющий ключу группы результат групповой операции +
            Возвращает словарь, сопоставляющий элементам последовательности определённые значения +
            Возвращает словарь, сопоставляющий ключу группы количество элементов с данным ключом +
            Возвращает частотный словарь объектов последовательности +
            Возвращает в словаре значение, связанное с указанным ключом, а если такого ключа нет, то значение по умолчанию +
            Получает значение по ключу или добавляет новое, если ключ отсутствует +
            Получает значение по ключу или добавляет значение по умолчанию +
            Возвращает словарь, в котором из исходного словаря удален элемент с данным ключом +
            Возвращает словарь, в котором из исходного словаря удалены все элементы с ключами, задаваемыми вторым операндом +
            Объединяет данные в двух словарях. Если в обоих имеются одинаковые ключи, то с ключом связывается значение из второго словаря +
            Обновляет данные в словаре данными из другого словаря +
            Удаляет из словаря пары с указанным значением ключа +
            Удаляет из словаря пары с указанными значениями ключа +
            Обновляет данные в словаре данными из другого словаря
    function Each<Key,Source,Res>(Self: sequence of System.Linq.IGrouping<Key,Source>; grOperation: System.Linq.IGrouping<Key,Source> -> Res): Dictionary<Key,Res>; -
             ,
    function Each<Key,Res>(Self: sequence of Key; proj: Key -> Res): Dictionary<Key,Res>; -
             ,
    function EachCount<Key,Source>(Self: sequence of System.Linq.IGrouping<Key,Source>): Dictionary<Key,integer>; -
             ,
    function EachCount<T>(Self: sequence of T): Dictionary<T,integer>; -
            
    function Get<Key, Value>(Self: IDictionary<Key, Value>; K: Key; V: Value := default(Value)): Value; -
             , , ,
    function GetOrAdd<Key, Value>(Self: IDictionary<Key, Value>; K: Key; valueFactory: Key -> Value): Value; -
             ,
    function GetOrAdd<Key, Value>(Self: IDictionary<Key, Value>; K: Key; defaultValue: Value): Value; -
            
    function operator-<TKey, TVal>(Self: Dictionary<TKey, TVal>; key: TKey): Dictionary<TKey, TVal>; -
             ,
    function operator-<TKey, TVal>(Self: Dictionary<TKey, TVal>; keys: sequence of TKey): Dictionary<TKey, TVal>; -
             , ,
    function operator+<TKey, TVal>(Self: Dictionary<TKey, TVal>; dict: Dictionary<TKey, TVal>): Dictionary<TKey, TVal>; -
             . ,
    procedure operator+=<TKey, TVal>(Self: Dictionary<TKey, TVal>; update: Dictionary<TKey, TVal>); -
            
    procedure operator-=<Key,Value>(Self: IDictionary<Key,Value>; k: Key); -
            
    procedure operator-=<Key,Value>(Self: IDictionary<Key,Value>; keys: sequence of Key); -
            
    procedure Update<TKey, TVal>(Self: Dictionary<TKey, TVal>; update: Dictionary<TKey, TVal>); -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for List T.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for List T.html index 7666c7793..cf42a1e39 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for List T.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for List T.html @@ -18,58 +18,58 @@ -

    +

    Методы расширения списков

    +
            Находит первую пару подряд идущих одинаковых элементов и возвращает индекс первого элемента пары. Если не найден, возвращается -1 +
            Находит первую пару подряд идущих одинаковых элементов, используя функцию сравнения eq, и возвращает индекс первого элемента пары. Если не найден, возвращается -1 +
            Заполняет элементы списка указанным значением +
            Заполняет элементы списка значениями, вычисляемыми по некоторому правилу +
            Возвращает индекс первого максимального элемента начиная с позиции index +
            Возвращает индекс первого элемента с максимальным значением ключа +
            Возвращает индекс первого минимального элемента начиная с позиции index +
            Возвращает индекс первого элемента с минимальным значением ключа +
            Возвращает последовательность индексов списка +
            Возвращает последовательность индексов элементов списка, удовлетворяющих условию +
            Возвращает последовательность индексов элементов списка, удовлетворяющих условию +
            Возвращает индекс последнего минимального элемента в диапазоне [0,index-1] +
            Возвращает индекс последнего максимального элемента +
            Возвращает индекс последнего элемента с максимальным значением ключа +
            Возвращает индекс последнего минимального элемента в диапазоне [0,index-1] +
            Возвращает индекс последнего минимального элемента +
            Возвращает индекс последнего элемента с минимальным значением ключа +
            Возвращает случайный элемент списка +
            Удаляет последний элемент. Если элементов нет, генерирует исключение +
            Заменяет в списке все вхождения одного значения на другое +
            Перемешивает элементы списка случайным образом +
            Возвращает срез списка от индекса from с шагом step +
            Возвращает срез списка от индекса from с шагом step длины не более count +
            Меняет местами элементы списка с индексами i и j +
            Преобразует элементы массива или списка по заданному правилу +
            Преобразует элементы массива или списка по заданному правилу
    function AdjacentFind<T>(Self: IList<T>; start: integer := 0): integer; -
             . , -1
    function AdjacentFind<T>(Self: IList<T>; eq: (T,T)->boolean; start: integer := 0): integer; -
             , eq, . , -1
    function Fill<T>(Self: List<T>; x: T): List<T>; -
            
    function Fill<T>(Self: List<T>; f: integer->T): List<T>; -
             ,
    function IndexMax<T>(Self: List<T>; index: integer := 0): integer; where T: IComparable<T>; -
             index
    function IndexMaxBy<T, TKey>(Self: array of T; keySelector: T -> TKey): integer; -
            
    function IndexMin<T>(Self: List<T>; index: integer := 0): integer; where T: IComparable<T>; -
             index
    function IndexMinBy<T, TKey>(Self: array of T; keySelector: T -> TKey): integer; -
            
    function Indices<T>(Self: List<T>): sequence of integer; -
            
    function Indices<T>(Self: List<T>; cond: T->boolean): sequence of integer; -
             ,
    function Indices<T>(Self: List<T>; cond: (T,integer) ->boolean): sequence of integer; -
             ,
    function LastIndexMax<T>(Self: List<T>; index: integer): integer; where T: IComparable<T>; -
             [0,index-1]
    function LastIndexMax<T>(Self: List<T>): integer; where T: IComparable<T>; -
            
    function LastIndexMaxBy<T, TKey>(Self: array of T; keySelector: T -> TKey): integer; -
            
    function LastIndexMin<T>(Self: List<T>; index: integer): integer; where T: IComparable<T>; -
             [0,index-1]
    function LastIndexMin<T>(Self: List<T>): integer; where T: IComparable<T>; -
            
    function LastIndexMinBy<T, TKey>(Self: array of T; keySelector: T -> TKey): integer; -
            
    function RandomElement<T>(Self: List<T>): T; -
            
    function RemoveLast<T>(Self: List<T>): List<T>; -
             . ,
    function Replace<T>(Self: List<T>; oldValue, newValue: T): List<T>; -
            
    function Shuffle<T>(Self: List<T>): List<T>; -
            
    function Slice<T>(Self: List<T>; from, step: integer): List<T>; -
             from step
    function Slice<T>(Self: List<T>; from, step, count: integer): List<T>; -
             from step count
    function Swap<T>(Self: List<T>; i, j: integer): List<T>; -
             i j
    function Transform<T>(Self: List<T>; f: T->T): List<T>; -
            
    function Transform<T>(Self: List<T>; f: (T,integer)->T): List<T>; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Tuple.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Tuple.html index 06e8490b6..6a2b7938e 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Tuple.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for Tuple.html @@ -4,52 +4,52 @@ -

    Tuple

    +

    Методы расширения типа Tuple

    +
            Добавляет поле к кортежу +
            Добавляет поле к кортежу +
            Добавляет поле к кортежу +
            Добавляет поле к кортежу +
            Добавляет поле к кортежу +
            Выводит кортеж на экран, после чего выводит пробел +
            Выводит кортеж на экран, после чего выводит пробел +
            Выводит кортеж на экран, после чего выводит пробел +
            Выводит кортеж на экран, после чего выводит пробел +
            Выводит кортеж на экран, после чего выводит пробел +
            Выводит кортеж на экран, после чего выводит пробел +
            Выводит кортеж на экран и переходит на новую строку +
            Выводит кортеж на экран и переходит на новую строку +
            Выводит кортеж на экран и переходит на новую строку +
            Выводит кортеж на экран и переходит на новую строку +
            Выводит кортеж на экран и переходит на новую строку +
            Выводит кортеж на экран и переходит на новую строку +
            Преобразует кортеж элементов одного типа в массив +
            Преобразует кортеж элементов одного типа в массив +
            Преобразует кортеж элементов одного типа в массив +
            Преобразует кортеж элементов одного типа в массив +
            Преобразует кортеж элементов одного типа в массив +
            Преобразует кортеж элементов одного типа в массив
    function Add<T1, T2, T3>(Self: (T1, T2); v: T3): (T1, T2, T3); -
            
    function Add<T1, T2, T3, T4>(Self: (T1, T2, T3); v: T4): (T1, T2, T3, T4); -
            
    function Add<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4); v: T5): (T1, T2, T3, T4, T5); -
            
    function Add<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5); v: T6): (T1, T2, T3, T4, T5, T6); -
            
    function Add<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6); v: T7): (T1, T2, T3, T4, T5, T6, T7); -
            
    procedure Print<T1, T2>(Self: (T1, T2)); -
             ,
    procedure Print<T1, T2, T3>(Self: (T1, T2, T3)); -
             ,
    procedure Print<T1, T2, T3, T4>(Self: (T1, T2, T3, T4)); -
             ,
    procedure Print<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4, T5)); -
             ,
    procedure Print<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5, T6)); -
             ,
    procedure Print<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6, T7)); -
             ,
    procedure Println<T1, T2>(Self: (T1, T2)); -
            
    procedure Println<T1, T2, T3>(Self: (T1, T2, T3)); -
            
    procedure Println<T1, T2, T3, T4>(Self: (T1, T2, T3, T4)); -
            
    procedure Println<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4, T5)); -
            
    procedure Println<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5, T6)); -
            
    procedure Println<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6, T7)); -
            
    function ToArray<T>(Self: (T,T)): array of T; -
            
    function ToArray<T>(Self: (T,T,T)): array of T; -
            
    function ToArray<T>(Self: (T,T,T,T)): array of T; -
            
    function ToArray<T>(Self: (T,T,T,T,T)): array of T; -
            
    function ToArray<T>(Self: (T,T,T,T,T,T)): array of T; -
            
    function ToArray<T>(Self: (T,T,T,T,T,T,T)): array of T; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array [,] of T.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array [,] of T.html index 339659010..8961cba4b 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array [,] of T.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array [,] of T.html @@ -29,84 +29,84 @@ -

    +

    Методы расширения двумерных динамических массивов

    +
            k-тый столбец двумерного массива +
            Количество столбцов в двумерном массиве +
            Возвращает массив столбцов двумерного массива +
            k-тый столбец двумерного массива как последовательность +
            Возвращает последовательность столбцов двумерного массива +
            Преобразует элементы двумерного массива и возвращает преобразованный массив +
            Преобразует элементы двумерного массива и возвращает преобразованный массив +
            Возвращает по заданному двумерному массиву последовательность его элементов по столбцам +
            Возвращает по заданному двумерному массиву последовательность его элементов по строкам +
            Возвращает по заданному двумерному массиву последовательность (a[i,j],i,j) +
            Заполняет элементы двумерного массива значениями, вычисляемыми по некоторому правилу +
            Заполняет элементы двумерного массива случайными значениями в диапазоне от a до b +
            Заполняет элементы двумерного массива случайными значениями в диапазоне от a до b +
            Применяет действие к каждому элементу двумерного массива +
            Применяет действие к каждому элементу двумерного массива +
            Возвращает по заданному двумерному массиву последовательность индексов элементов, удовлетворяющих заданному условию +
            Возвращает по заданному двумерному массиву последовательность индексов элементов, удовлетворяющих заданному условию +
            Равны ли матрицы +
            Возвращает срез двумерного массива. RowIndex и ColIndex задают срезаемые строки и столбцы +
            Возвращает срез двумерного массива между строками FromRow, ToRow и столбцами FromCol, ToCol +
            Есть ли элемент в матрице +
            Вывод двумерного массива, w - ширина поля вывода +
            Вывод двумерного вещественного массива по формату :w:f +
            Вывод двумерного массива и переход на следующую строку, w - ширина поля вывода +
            Вывод двумерного вещественного массива по формату :w:f и переход на следующую строку +
            k-тая строка двумерного массива +
            Количество строк в двумерном массиве +
            Возвращает массив строк двумерного массива +
            k-тая строка двумерного массива как последовательность +
            Возвращает последовательность строк двумерного массива +
            Меняет столбец k двумерного массива на другой столбец +
            Меняет столбец k двумерного массива на другой столбец +
            Меняет строку k двумерного массива на другую строку +
            Меняет строку k двумерного массива на другую строку +
            Количество столбцов в двумерном массиве +
            Меняет местами два столбца двумерного массива с номерами k1 и k2 +
            Меняет местами две строки двумерного массива с номерами k1 и k2 +
            Преобразует элементы двумерного массива по заданному правилу +
            Преобразует элементы двумерного массива по заданному правилу
    function Col<T>(Self: array [,] of T; k: integer): array of T; -
            k-
    function ColCount<T>(Self: array [,] of T): integer; -
            
    function Cols<T>(Self: array [,] of T): array of array of T; -
            
    function ColSeq<T>(Self: array [,] of T; k: integer): sequence of T; -
            k-
    function ColsSeq<T>(Self: array [,] of T): sequence of sequence of T; -
            
    function ConvertAll<T, T1>(Self: array [,] of T; converter: T->T1): array [,] of T1; -
            
    function ConvertAll<T, T1>(Self: array [,] of T; converter: (T,integer,integer)->T1): array [,] of T1; -
            
    function ElementsByCol<T>(Self: array [,] of T): sequence of T; -
            
    function ElementsByRow<T>(Self: array [,] of T): sequence of T; -
            
    function ElementsWithIndices<T>(Self: array [,] of T): sequence of (T, integer, integer); -
             (a[i,j],i,j)
    procedure Fill<T>(Self: array [,] of T; f: (integer,integer) ->T); -
             ,
    procedure FillRandom(Self: array [,] of integer; a,b: integer); -
             a b
    procedure FillRandom(Self: array [,] of real; a,b: real); -
             a b
    procedure ForEach<T>(Self: array [,] of T; act: T -> ()); -
            
    procedure ForEach<T>(Self: array [,] of T; act: (T,integer,integer) -> ()); -
            
    function Indices<T>(Self: array [,] of T; cond: T -> boolean): sequence of (integer, integer); -
             ,
    function Indices<T>(Self: array [,] of T; cond: (T,integer,integer) -> boolean): sequence of (integer, integer); -
             ,
    function MatrEqual<T>(Self,b: array[,] of T): boolean; -
            
    function MatrSlice<T>(Self: array[,] of T; RowIndex: array of integer; ColIndex: array of integer): array[,] of T; -
             . RowIndex ColIndex
    function MatrSlice<T>(Self: array[,] of T; FromRow, ToRow, FromCol, ToCol: integer): array[,] of T; -
             FromRow, ToRow FromCol, ToCol
    function operator in<T>(x: T; a: array[,] of T): boolean; -
            
    function Print<T>(Self: array [,] of T; w: integer := 4): array [,] of T; -
             , w -
    function Print(Self: array [,] of real; w: integer := 7; f: integer := 2): array [,] of real; -
             :w:f
    function Println<T>(Self: array [,] of T; w: integer := 4): array [,] of T; -
             , w -
    function Println(Self: array [,] of real; w: integer := 7; f: integer := 2): array [,] of real; -
             :w:f
    function Row<T>(Self: array [,] of T; k: integer): array of T; -
            k-
    function RowCount<T>(Self: array [,] of T): integer; -
            
    function Rows<T>(Self: array [,] of T): array of array of T; -
            
    function RowSeq<T>(Self: array [,] of T; k: integer): sequence of T; -
            k-
    function RowsSeq<T>(Self: array [,] of T): sequence of sequence of T; -
            
    procedure SetCol<T>(Self: array [,] of T; k: integer; a: array of T); -
             k
    procedure SetCol<T>(Self: array [,] of T; k: integer; a: sequence of T); -
             k
    procedure SetRow<T>(Self: array [,] of T; k: integer; a: array of T); -
             k
    procedure SetRow<T>(Self: array [,] of T; k: integer; a: sequence of T); -
             k
    function Size<T>(Self: array [,] of T): (integer,integer); -
            
    procedure SwapCols<T>(Self: array [,] of T; k1, k2: integer); -
             k1 k2
    procedure SwapRows<T>(Self: array [,] of T; k1, k2: integer); -
             k1 k2
    procedure Transform<T>(Self: array [,] of T; f: T->T); -
            
    procedure Transform<T>(Self: array [,] of T; f: (T,integer,integer)->T); -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array of T.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array of T.html index 8fc7ca3f0..154188deb 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array of T.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array of T.html @@ -36,160 +36,160 @@ - + -

    - - +

    Методы расширения одномерных динамических массивов

    +
    ( sequence of T) function Cartesian<T, T1>(b: sequence of T1): sequence of (T, T1); -
            
    ( sequence of T) function Cartesian<T, T1>(b: sequence of T1): sequence of (T, T1); -
             n- ,
    + +
            Находит первую пару подряд идущих одинаковых элементов, используя функцию сравнения eq, и возвращает индекс первого элемента пары. Если не найден, возвращается -1 +
            Возвращает, совпадают ли массивы +
            Выполняет бинарный поиск в отсортированном массиве +
            Возвращает n-тую декартову степень множества элементов, заданного массивом +
            Возвращает n-тую декартову степень множества элементов, заданного последовательностью +
            Возвращает n-тую декартову степень множества символов, заданного строкой +
            Возвращает все сочетания по m элементов +
            Возвращает все сочетания по m элементов +
            Возвращает все сочетания по m элементов +
            Преобразует элементы массива и возвращает преобразованный массив +
            Преобразует элементы массива и возвращает преобразованный массив +
            Заполняет элементы массива указанным значением +
            Заполняет элементы массива значениями, вычисляемыми по некоторому правилу +
            Заполняет массив случайными значениями в диапазоне от a до b +
            Заполняет массив случайными значениями в диапазоне от a до b +
            Выполняет поиск первого элемента в массиве, удовлетворяющего предикату. Если не найден, возвращается нулевое значение соответствующего типа +
            Возвращает в виде массива все элементы, удовлетворяющие предикату +
            Выполняет поиск индекса первого элемента в массиве, удовлетворяющего предикату. Если не найден, возвращается -1 +
            Выполняет поиск индекса первого элемента в массиве, удовлетворяющего предикату, начиная с индекса start. Если не найден, возвращается -1 +
            Выполняет поиск последнего элемента в массиве, удовлетворяющего предикату. Если не найден, возвращается нулевое значение соответствующего типа +
            Выполняет поиск индекса последнего элемента в массиве, удовлетворяющего предикату. Если не найден, возвращается -1 +
            Выполняет поиск индекса последнего элемента в массиве, удовлетворяющего предикату, в диапазоне индексов от 0 до start. Если не найден, возвращается -1 +
            Возвращает индекс последнего элемента массива +
            Возвращает индекс первого максимального элемента +
            Возвращает индекс первого минимального элемента +
            Возвращает индекс первого вхождения элемента или -1 если элемент не найден +
            Возвращает индекс первого вхождения элемента начиная с индекса start или -1 если элемент не найден +
            Возвращает последовательность индексов одномерного массива +
            Возвращает последовательность индексов элементов одномерного массива, удовлетворяющих условию +
            Возвращает последовательность индексов элементов одномерного массива, удовлетворяющих условию +
            Проверяет, отсортирован ли массив по возрастанию +
            Проверяет, отсортирован ли массив в порядке, заданном компаратором comparer +
            Проверяет, отсортирован ли массив по возрастанию ключа +
            Проверяет, отсортирован ли массив по возрастанию ключа с компаратором +
            Проверяет, отсортирован ли массив по убыванию ключа +
            Проверяет, отсортирован ли массив по убыванию ключа с компаратором +
            Проверяет, отсортирован ли массив по убыванию +
            Проверяет, отсортирован ли массив по убыванию в порядке, заданном компаратором comparer +
            Возвращает индекс последнего минимального элемента в диапазоне [0,index-1] +
            Возвращает индекс последнего максимального элемента +
            Возвращает индекс последнего минимального элемента в диапазоне [0,index-1] +
            Возвращает индекс последнего минимального элемента +
            Возвращает индекс последнего вхождения элемента или -1 если элемент не найден +
            Возвращает индекс последнего вхождения элемента начиная с индекса start или -1 если элемент не найден +
            Возвращает индекс первого элемента массива +
            Возвращает максимальный элемент +
            Возвращает максимальный элемент +
            Возвращает максимальный элемент +
            Возвращает минимальный элемент +
            Возвращает минимальный элемент +
            Возвращает минимальный элемент +
            Возвращает все перестановки элементов массива +
            Возвращает все перестановки элементов последовательности +
            Возвращает все частичные перестановки из n элементов по m +
            Возвращает все частичные перестановки из n элементов по m +
            Возвращает все перестановки букв в строке в виде последовательности строк +
            Возвращает все частичные перестановки букв строки по m символов в виде последовательности строк +
            Возвращает случайный элемент массива +
            Заменяет в массиве все вхождения одного значения на другое +
            Перемешивает элементы массива случайным образом +
            Возвращает срез массива от индекса from с шагом step +
            Возвращает срез массива от индекса from с шагом step длины не более count +
            Сортирует массив по возрастанию +
            Сортирует массив по возрастанию +
            Сортирует массив по возрастанию, используя cmp в качестве функции сравнения элементов +
            Сортирует массив по возрастанию по ключу +
            Сортирует массив по возрастанию по ключу +
            Сортирует массив по убыванию +
            Сортирует массив по убыванию +
            Сортирует массив по убыванию по ключу +
            Сортирует массив по убыванию по ключу +
            Меняет местами элементы массива с индексами i и j +
            Преобразует элементы массива по заданному правилу +
            Преобразует элементы массива по заданному правилу
    (расширение sequence of T) function Cartesian<T, T1>(b: sequence of T1): sequence of (T, T1); +
            Возвращает декартово произведение последовательностей в виде последовательности пар
    (расширение sequence of T) function Cartesian<T, T1>(b: sequence of T1): sequence of (T, T1); +
            Возвращает n-тую декартову степень множества символов, заданного строкой
    function AdjacentFind<T>(Self: array of T; eq: (T,T)->boolean; start: integer := 0): integer; -
             , eq, . , -1
    function ArrEqual<T>(Self,b: array of T): boolean; -
            ,
    function BinarySearch<T>(Self: array of T; x: T): integer; -
            
    function CartesianPower<T>(Self: array of T; n: integer): sequence of array of T; -
             n- ,
    function CartesianPower<T>(Self: sequence of T; n: integer): sequence of array of T; -
             n- ,
    function CartesianPower(Self: string; n: integer): sequence of string; -
             n- ,
    function Combinations<T>(Self: array of T; m: integer): sequence of array of T; -
             m
    function Combinations<T>(Self: sequence of T; m: integer): sequence of array of T; -
             m
    function Combinations(Self: string; m: integer): sequence of string; -
             m
    function ConvertAll<T, T1>(Self: array of T; converter: T->T1): array of T1; -
            
    function ConvertAll<T, T1>(Self: array of T; converter: (T,integer)->T1): array of T1; -
            
    procedure Fill<T>(Self: array of T; x: T); -
            
    procedure Fill<T>(Self: array of T; f: integer->T); -
             ,
    procedure FillRandom(Self: array of integer; a,b: integer); -
             a b
    procedure FillRandom(Self: array of real; a,b: real); -
             a b
    function Find<T>(Self: array of T; p: T->boolean): T; -
             , . ,
    function FindAll<T>(Self: array of T; p: T->boolean): array of T; -
             ,
    function FindIndex<T>(Self: array of T; p: T->boolean): integer; -
             , . , -1
    function FindIndex<T>(Self: array of T; start: integer; p: T->boolean): integer; -
             , , start. , -1
    function FindLast<T>(Self: array of T; p: T->boolean): T; -
             , . ,
    function FindLastIndex<T>(Self: array of T; p: T->boolean): integer; -
             , . , -1
    function FindLastIndex<T>(self: array of T; start: integer; p: T->boolean): integer; -
             , , 0 start. , -1
    function High(Self: System.Array); -
            
    function IndexMax<T>(Self: array of T; index: integer := 0): integer; where T: IComparable<T>; -
            
    function IndexMin<T>(Self: array of T; index: integer := 0): integer; where T: IComparable<T>; -
            
    function IndexOf<T>(Self: array of T; x: T): integer; -
             -1
    function IndexOf<T>(Self: array of T; x: T; start: integer): integer; -
             start -1
    function Indices<T>(Self: array of T): sequence of integer; -
            
    function Indices<T>(Self: array of T; cond: T->boolean): sequence of integer; -
             ,
    function Indices<T>(Self: array of T; cond: (T,integer) ->boolean): sequence of integer; -
             ,
    function IsOrdered<T>(self: array of T): boolean; where T: IComparable<T>; -
            ,
    function IsOrdered<T>(self: array of T; comparer: IComparer<T>): boolean; -
            , , comparer
    function IsOrderedBy<T, TKey>(self: array of T; keySelector: T -> TKey): boolean; -
            ,
    function IsOrderedBy<T, TKey>(self: array of T; keySelector: T -> TKey; -
            ,
    function IsOrderedByDescending<T, TKey>(self: array of T; keySelector: T -> TKey): boolean; -
            ,
    function IsOrderedByDescending<T, TKey>(self: array of T; keySelector: T -> TKey; -
            ,
    function IsOrderedDescending<T>(self: array of T): boolean; where T: IComparable<T>; -
            ,
    function IsOrderedDescending<T>(self: array of T; comparer: IComparer<T>): boolean; -
            , , comparer
    function LastIndexMax<T>(Self: array of T; index: integer): integer; where T: IComparable<T>; -
             [0,index-1]
    function LastIndexMax<T>(Self: array of T): integer; where T: IComparable<T>; -
            
    function LastIndexMin<T>(Self: array of T; index: integer): integer; where T: IComparable<T>; -
             [0,index-1]
    function LastIndexMin<T>(Self: array of T): integer; where T: IComparable<T>; -
            
    function LastIndexOf<T>(Self: array of T; x: T): integer; -
             -1
    function LastIndexOf<T>(Self: array of T; x: T; start: integer): integer; -
             start -1
    function Low(Self: System.Array); -
            
    function Max<T>(Self: array of T): T; where T: IComparable<T>; -
            
    function Max(Self: array of integer): integer; -
            
    function Max(Self: array of real): real; -
            
    function Min<T>(Self: array of T): T; where T: IComparable<T>; -
            
    function Min(Self: array of integer): integer; -
            
    function Min(Self: array of real): real; -
            
    function Permutations<T>(Self: array of T): sequence of array of T; -
            
    function Permutations<T>(Self: sequence of T): sequence of array of T; -
            
    function Permutations<T>(Self: array of T; m: integer): sequence of array of T; -
             n m
    function Permutations<T>(Self: sequence of T; m: integer): sequence of array of T; -
             n m
    function Permutations(Self: string): sequence of string; -
            
    function Permutations(Self: string; m: integer): sequence of string; -
             m
    function RandomElement<T>(Self: array of T): T; -
            
    function Replace<T>(Self: array of T; oldValue, newValue: T): array of T; -
            
    function Shuffle<T>(Self: array of T): array of T; -
            
    function Slice<T>(Self: array of T; from, step: integer): array of T; -
             from step
    function Slice<T>(Self: array of T; from, step, count: integer): array of T; -
             from step count
    procedure Sort<T>(Self: array of T); -
            
    procedure Sort(Self: array of string); -
            
    procedure Sort<T>(Self: array of T; cmp: (T,T) ->integer); -
             , cmp
    procedure Sort<T,T1>(Self: array of T; keySelector: T -> T1); -
            
    procedure Sort<T>(Self: array of T; keySelector: T -> string); -
            
    procedure SortDescending<T>(Self: array of T); -
            
    procedure SortDescending(Self: array of string); -
            
    procedure SortDescending<T,T1>(Self: array of T; keySelector: T -> T1); -
            
    procedure SortDescending<T>(Self: array of T; keySelector: T -> string); -
            
    function Swap<T>(Self: array of T; i, j: integer): array of T; -
             i j
    function Transform<T>(Self: array of T; f: T->T): array of T; -
            
    function Transform<T>(Self: array of T; f: (T,integer)->T): array of T; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for char.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for char.html index 532bf221b..08a9150b1 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for char.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for char.html @@ -12,30 +12,30 @@ -

    char

    +

    Методы расширения типа char

    +
            Возвращает True если значение находится между двумя другими +
            Код символа в кодировке Unicode +
            Возвращает True если символ находится в диапазоне [a,b] +
            Является ли символ цифрой +
            Является ли символ буквой +
            Принадлежит ли символ к категории букв нижнего регистра +
            Принадлежит ли символ к категории букв верхнего регистра +
            Предыдущий символ +
            Следующий символ +
            Преобразует символ в цифру +
            Преобразует символ в нижний регистр +
            Преобразует символ в верхний регистр
    function Between(Self: char; a, b: char; inclusive: boolean := True): boolean; -
             True
    function Code(Self: char): integer; -
             Unicode
    function InRange(Self: char; a,b: char): boolean; -
             True [a,b]
    function IsDigit(Self: char); -
            
    function IsLetter(Self: char): boolean; -
            
    function IsLower(Self: char): boolean; -
            
    function IsUpper(Self: char): boolean; -
            
    function Pred(Self: char); -
            
    function Succ(Self: char); -
            
    function ToDigit(Self: char): integer; -
            
    function ToLower(Self: char): char; -
            
    function ToUpper(Self: char): char; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for integer.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for integer.html index 282dccb22..7ee1c9f62 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for integer.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for integer.html @@ -17,40 +17,40 @@ -

    integer

    +

    Методы расширения типа integer

    +
            Возвращает True если значение находится между двумя другими +
            Возвращает число, ограниченное диапазоном от bottom до top включительно +
            Возвращает число, ограниченное величиной bottom снизу +
            Возвращает число, ограниченное величиной top сверху +
            Возвращает True если целое делится на указанное значение +
            Возвращает True если целое делится на все значения +
            Возвращает True если целое делится на одно из значений +
            Генерирует последовательность целых от текущего значения до n в убывающем порядке +
            Возвращает True если значение находится в диапазоне [a,b] +
            Возвращает, является ли целое четным +
            Возвращает, является ли целое нечетным +
            Возвращает True если целое не делится на указанное значение +
            Возвращает последовательность чисел от 1 до данного +
            Возвращает квадрат числа +
            Возвращает квадратный корень числа +
            Возвращает последовательность целых 0,1,...n-1 +
            Генерирует последовательность целых от текущего значения до n
    function Between(Self: integer; a, b: integer; inclusive: boolean := true): boolean; -
             True
    function Clamp(Self: integer; bottom,top: integer): integer; -
             , bottom top
    function ClampBottom(Self: integer; bottom: integer): integer; -
             , bottom
    function ClampTop(Self: integer; top: integer): integer; -
             , top
    function Divs(Self,d: integer): boolean; -
             True
    function DivsAll(Self: integer; params a: array of integer): boolean; -
             True
    function DivsAny(Self: integer; params a: array of integer): boolean; -
             True
    function Downto(Self: integer; n: integer): sequence of integer; -
             n
    function InRange(Self: integer; a,b: integer): boolean; -
             True [a,b]
    function IsEven(Self: integer): boolean; -
            ,
    function IsOdd(Self: integer): boolean; -
            ,
    function NotDivs(Self,d: integer): boolean; > 0; -
             True
    function Range(Self: integer): sequence of integer; -
             1
    function Sqr(Self: integer): int64; -
            
    function Sqrt(Self: integer): real; -
            
    function Times(Self: integer): sequence of integer; -
             0,1,...n-1
    function To(Self: integer; n: integer): sequence of integer; -
             n
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for real.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for real.html index f15336653..2f4993b47 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for real.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for real.html @@ -14,36 +14,36 @@ -

    real

    +

    Методы расширения типа real

    +
            Возвращает True если значение находится между двумя другими +
            Возвращает наменьшее целое, большее или равное вещественному числу +
            Возвращает число, ограниченное диапазоном от bottom до top включительно +
            Возвращает число, ограниченное величиной bottom снизу +
            Возвращает число, ограниченное величиной top сверху +
            Возвращает наибольшее целое, меньшее или равное вещественному числу +
            Возвращает True если значение находится в диапазоне [a, b] +
            Возвращает число, округленное до ближайшего целого +
            Возвращает x, округленное до ближайшего вещественного с digits знаками после десятичной точки +
            Возвращает число, округленное до ближайшего длинного целого +
            Возвращает квадрат числа +
            Возвращает квадратный корень числа +
            Возвращает вещественное, отформатированное к строке с frac цифрами после десятичной точки +
            Возвращает целую часть вещественного числа +
            Возвращает целую часть вещественного числа как длинное целое
    function Between(Self: real; a, b: real; inclusive: boolean := True): boolean; -
             True
    function Ceil(Self: real): integer; -
             ,
    function Clamp(Self: real; bottom,top: real): real; -
             , bottom top
    function ClampBottom(Self: real; bottom: real): real; -
             , bottom
    function ClampTop(Self: real; top: real): real; -
             , top
    function Floor(Self: real): integer; -
             ,
    function InRange(Self: real; a,b: real): boolean; -
             True [a, b]
    function Round(Self: real): integer; -
             ,
    function Round(Self: real; digits: integer): real; -
             x, digits
    function RoundBigInteger(Self: real): BigInteger; -
             ,
    function Sqr(Self: real): real; -
            
    function Sqrt(Self: real): real; -
            
    function ToString(Self: real; frac: integer): string; -
             , frac
    function Trunc(Self: real): integer; -
            
    function TruncBigInteger(Self: real): BigInteger; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for sequence of T.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for sequence of T.html index 51efd899c..5ad86d22b 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for sequence of T.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for sequence of T.html @@ -50,214 +50,214 @@ -

    +

    Методы расширения последовательностей

    +
            Группирует одинаковые подряд идущие элементы, получая последовательность массивов +
            Группирует подряд идущие элементы с одинаковыми значениями ключамиИспользует компаратор comp +
            Группирует подряд идущие элементы с одинаковыми значениями ключамиИспользует компаратор по-умолчанию +
            Возвращает среднее элементов последовательности +
            Разбивает последовательность на серии длины size +
            Разбивает последовательность на серии длины size и применяет проекцию к каждой серии +
            Возвращает декартово произведение последовательностей, проектируя каждую пару на значение +
            Возвращает декартово произведение последовательностей, проектируя каждую тройку на значение +
            Возвращает декартово произведение последовательностей, проектируя каждую четвёрку на значение +
            Возвращает декартово произведение последовательностей, проектируя каждую пятёрку на значение +
            Возвращает декартово произведение последовательностей в виде последовательности пар +
            Возвращает декартово произведение последовательностей в виде последовательности троек +
            Возвращает декартово произведение последовательностей в виде последовательности четвёрок +
            Возвращает декартово произведение последовательностей в виде последовательности пятёрок +
            Возвращает количество элементов, равных указанному значению +
            Возвращает элементы последовательности, ключи для которых отличаются, используя компоратор comp +
            Возвращает элементы последовательности, ключи для которых отличаются, используя компоратор по-умолчанию +
            Преобразует последовательность последовательностей в плоскую последовательность +
            Применяет действие к каждому элементу последовательности +
            Применяет действие к каждому элементу последовательности, зависящее от номера элемента +
            Возвращает последовательность разностей соседних элементов исходной последовательности +
            Возвращает последовательность разностей соседних элементов исходной последовательности +
            Возвращает последовательность разностей соседних элементов исходной последовательности +
            Возвращает последовательность разностей соседних элементов исходной последовательности +
            Возвращает последовательность разностей соседних элементов исходной последовательности +
            Возвращает последовательность разностей соседних элементов исходной последовательности +
            Возвращает последовательность разностей соседних элементов исходной последовательности +
            Возвращает последовательность разностей соседних элементов исходной последовательности +
            Возвращает последовательность разностей соседних элементов исходной последовательности. В качестве функции разности используется func +
            Возвращает последовательность разностей соседних элементов исходной последовательности. В качестве функции разности используется func +
            Чередует элементы двух последовательностей +
            Чередует элементы трех последовательностей +
            Чередует элементы четырех последовательностей +
            Проверяет, отсортирована ли последовательность по возрастанию в порядке, заданном компаратором comparer +
            Проверяет, отсортирована ли последовательность по возрастанию +
            Проверяет, отсортирована ли последовательность по возрастанию ключа, используя компаратор +
            Проверяет, отсортирована ли последовательность по возрастанию ключа +
            Проверяет, отсортирована ли последовательность по убыванию ключа, используя компаратор +
            Проверяет, отсортирована ли последовательность по убыванию ключа +
            Проверяет, отсортирована ли последовательность по убыванию +
            Проверяет, отсортирована ли последовательность по убыванию в порядке, заданном компаратором comparer +
            Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя delim в качестве разделителя +
            Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя пробел в качестве разделителя +
            Возвращает последний элемент последовательности с максимальным значением ключа +
            Возвращает последний элемент последовательности с минимальным значением ключа +
            Возвращает первый элемент последовательности с максимальным значением ключа +
            Возвращает первый элемент последовательности с минимальным значением ключа +
            Возвращает True, если ни один элемент не удовлетворяет условию +
            Нумерует последовательность с единицы +
            Нумерует последовательность с номера from +
            Превращает последовательность в последовательность массивов, содержащих n соседних элементов +
            Возвращает отсортированную по возрастанию последовательность +
            Возвращает отсортированную по возрастанию последовательность +
            Возвращает отсортированную по убыванию последовательность +
            Возвращает отсортированную по убыванию последовательность +
            Превращает последовательность в последовательность пар соседних элементов +
            Превращает последовательность в последовательность пар соседних элементов, применяет func к каждой паре полученных элементов и получает новую последовательность +
            Возвращает последовательность частичных сумм элементов последовательности +
            Возвращает последовательность частичных сумм элементов последовательности +
            Возвращает последовательность частичных сумм элементов последовательности +
            Разделяет последовательность на две по заданному условию. Реализуется двухпроходным алгоритмом +
            Разделяет последовательность на две по заданному условию, в котором участвует индекс. Реализуется двухпроходным алгоритмом +
            Выводит последовательность на экран, используя delim в качестве разделителя +
            Выводит последовательность на экран, используя пробел в качестве разделителя +
            Выводит последовательность, каждый элемент выводится на новой строке +
            Выводит последовательность, каждый элемент отображается с помощью функции map и выводится на новой строке +
            Выводит последовательность на экран, используя delim в качестве разделителя, и переходит на новую строку +
            Выводит последовательность на экран, используя пробел качестве разделителя, и переходит на новую строку +
            Возвращает произведение элементов последовательности +
            Возвращает произведение элементов последовательности +
            Возвращает произведение элементов последовательности, спроектированных на числовое значение +
            Возвращает произведение элементов последовательности, спроектированных на числовое значение +
            Возвращает произведение элементов последовательности, спроектированных на числовое значение +
            Возвращает произведение элементов последовательности +
            Возвращает последовательность, в которой первый элемент равен первому элементу исходной последовательности, а каждый следующий -результат применения функции func к предыдущему элементу новой последовательности и текущему элементу исходной +
            Возвращает последовательность, в которой первый элемент равен first, а каждый следующий -результат применения функции func к предыдущему элементу новой последовательности и текущему элементу исходной +
            Возвращает последовательность без последних count элементов +
            Возвращает срез последовательности от номера from с шагом step > 0 +
            Возвращает срез последовательности от номера from с шагом step > 0 длины не более count +
            Возвращает отсортированную по возрастанию последовательность +
            Возвращает отсортированную по убыванию последовательность +
            Разбивает последовательность на две в позиции ind. Реализуется двухпроходным алгоритмом +
            Возвращает сумму элементов последовательности +
            Табулирует функцию последовательностью +
            Возвращает последние count элементов последовательности +
            Возвращает множество HashSet по данной последовательности +
            Возвращает LinkedList по данной последовательности +
            Возвращает множество по данной последовательности +
            Возвращает множество SortedSet по данной последовательности +
            Разъединяет последовательность двухэлементных кортежей на две последовательности. Реализуется двухпроходным алгоритмом +
            Разъединяет последовательность трехэлементных кортежей на три последовательности. Реализуется многопроходным алгоритмом +
            Разъединяет последовательность четырехэлементных кортежей на четыре последовательности. Реализуется многопроходным алгоритмом +
            Превращает последовательность в последовательность массивов, содержащих n соседних элементов +
            Выводит последовательность строк в файл +
            Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов +
            Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов +
            Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов +
            Объединяет две последовательности в последовательность двухэлементных кортежей +
            Объединяет три последовательности в последовательность трехэлементных кортежей +
            Объединяет четыре последовательности в последовательность четырехэлементных кортежей +
            Объединяет четыре последовательности в последовательность четырехэлементных кортежей +
            Объединяет две последовательности в последовательность двухэлементных кортежей +
            Объединяет три последовательности в последовательность трехэлементных кортежей +
            Объединяет четыре последовательности в последовательность четырехэлементных кортежей
    function AdjacentGroup<T>(Self: sequence of T): sequence of array of T; -
             ,
    function AdjacentGroupBy<T,TKey>(self: sequence of T; by: T->TKey; comp: IEqualityComparer<TKey>): sequence of System.Linq.IGrouping<TKey, T>; -
             comp
    function AdjacentGroupBy<T,TKey>(self: sequence of T; by: T->TKey); -
             -
    function Average(Self: sequence of BigInteger): real; -
            
    function Batch<T>(Self: sequence of T; size: integer): sequence of array of T; -
             size
    function Batch<T, Res>(Self: sequence of T; size: integer; proj: Func<array of T, Res>): sequence of Res; -
             size
    function Cartesian<T, T1, TRes>(Self: sequence of T; b: sequence of T1; func: (T,T1)->TRes): sequence of TRes; -
             ,
    function Cartesian<T, T1, T2, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2)->TRes): sequence of TRes; -
             ,
    function Cartesian<T, T1, T2, T3, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3)->TRes): sequence of TRes; -
             ,
    function Cartesian<T, T1, T2, T3, T4, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4)->TRes): sequence of TRes; -
             ,
    function Cartesian<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1); -
            
    function Cartesian<T, T1, T2>(Self: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2); -
            
    function Cartesian<T, T1, T2, T3>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3); -
            
    function Cartesian<T, T1, T2, T3, T4>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4); -
            
    function CountOf<T>(Self: sequence of T; x: T): integer; -
             ,
    function DistinctBy<T, TKey>(Self: sequence of T; by: T->TKey; comp: IEqualityComparer<TKey>): sequence of T; -
             , , comp
    function DistinctBy<T, TKey>(Self: sequence of T; by: T->TKey); -
             , , -
    function Flatten<T>(Self: sequence of sequence of T): sequence of T; -
            
    procedure ForEach<T>(Self: sequence of T; action: T -> ()); -
            
    procedure ForEach<T>(Self: sequence of T; action: (T,integer) -> ()); -
             ,
    function Incremental(Self: sequence of integer): sequence of integer; -
            
    function Incremental(Self: array of integer): sequence of integer; -
            
    function Incremental(Self: List<integer>): sequence of integer; -
            
    function Incremental(Self: LinkedList<integer>): sequence of integer; -
            
    function Incremental(Self: sequence of real): sequence of real; -
            
    function Incremental(Self: array of real): sequence of real; -
            
    function Incremental(Self: List<real>): sequence of real; -
            
    function Incremental(Self: LinkedList<real>): sequence of real; -
            
    function Incremental<T, T1>(Self: sequence of T; func: (T,T)->T1): sequence of T1; -
             . func
    function Incremental<T, T1>(Self: sequence of T; func: (T,T,integer)->T1): sequence of T1; -
             . func
    function Interleave<T>(Self: sequence of T; a: sequence of T): sequence of T; -
            
    function Interleave<T>(Self: sequence of T; a, b: sequence of T): sequence of T; -
            
    function Interleave<T>(Self: sequence of T; a, b, c: sequence of T): sequence of T; -
            
    function IsOrdered<T>(self: sequence of T; comparer: IComparer<T>): boolean; -
            , , comparer
    function IsOrdered<T>(self: sequence of T): boolean; where T: IComparable<T>; -
            ,
    function IsOrderedBy<T, TKey>(self: sequence of T; keySelector: T -> TKey; -
            , ,
    function IsOrderedBy<T, TKey>(self: sequence of T; keySelector: T -> TKey): boolean; -
            ,
    function IsOrderedByDescending<T, TKey>(self: sequence of T; keySelector: T -> TKey; -
            , ,
    function IsOrderedByDescending<T, TKey>(self: sequence of T; keySelector: T -> TKey): boolean; -
            ,
    function IsOrderedDescending<T>(self: sequence of T): boolean; where T: IComparable<T>; -
            ,
    function IsOrderedDescending<T>(self: sequence of T; comparer: IComparer<T>): boolean; -
            , , comparer
    function JoinToString<T>(Self: sequence of T; delim: string): string; -
             , , delim
    function JoinToString<T>(Self: sequence of T): string; -
             , ,
    function LastMaxBy<T, TKey>(Self: sequence of T; keySelector: T -> TKey): T; -
            
    function LastMinBy<T, TKey>(Self: sequence of T; keySelector: T -> TKey): T; -
            
    function MaxBy<T, TKey>(Self: sequence of T; keySelector: T -> TKey): T; -
            
    function MinBy<T, TKey>(Self: sequence of T; keySelector: T -> TKey): T; -
            
    function None<T>(Self: sequence of T; pred: T->boolean): boolean; -
             True,
    function Numerate<T>(Self: sequence of T): sequence of (integer, T); -
            
    function Numerate<T>(Self: sequence of T; from: integer): sequence of (integer, T); -
             from
    function Nwise<T>(Self: sequence of T; n: integer): sequence of array of T; -
             , n
    function Order<T>(Self: sequence of T): sequence of T; -
            
    function Order(Self: sequence of string): sequence of string; -
            
    function OrderDescending<T>(Self: sequence of T): sequence of T; -
            
    function OrderDescending(Self: sequence of string): sequence of string; -
            
    function Pairwise<T>(Self: sequence of T): sequence of (T, T); -
            
    function Pairwise<T, Res>(Self: sequence of T; func: (T,T)->Res): sequence of Res; -
             , func
    function PartialSum(Self: sequence of integer): sequence of integer; -
            
    function PartialSum(Self: sequence of real): sequence of real; -
            
    function PartialSum(Self: sequence of BigInteger): sequence of BigInteger; -
            
    function Partition<T>(Self: sequence of T; cond: T->boolean): (sequence of T, sequence of T); -
             .
    function Partition<T>(Self: sequence of T; cond: (T,integer)->boolean): (sequence of T, sequence of T); -
             , .
    function Print<T>(Self: sequence of T; delim: string): sequence of T; -
             , delim
    function Print<T>(Self: sequence of T): sequence of T; -
             ,
    function PrintLines<T>(Self: sequence of T): sequence of T; -
             ,
    function PrintLines<T,T1>(Self: sequence of T; map: T->T1): sequence of T; -
             , map
    function Println<T>(Self: sequence of T; delim: string): sequence of T; -
             , delim ,
    function Println<T>(Self: sequence of T): sequence of T; -
             , ,
    function Product(Self: sequence of real): real; -
            
    function Product(Self: sequence of integer): int64; -
            
    function Product<T>(Self: sequence of T; f: T->real): real; -
             ,
    function Product<T>(Self: sequence of T; f: T->integer): int64; -
             ,
    function Product<T>(Self: sequence of T; f: T->BigInteger): BigInteger; -
             ,
    function Product(Self: sequence of BigInteger): BigInteger; -
            
    function Scan<T>(Self: sequence of T; func: (T,T) -> T): sequence of T; -
             , , - func
    function Scan<T,T1>(Self: sequence of T; first: T1; func: (T1,T) -> T1): sequence of T1; -
             , first, - func
    function SkipLast<T>(self: sequence of T; count: integer := 1): sequence of T; -
             count
    function Slice<T>(Self: sequence of T; from, step: integer): sequence of T; -
             from step > 0
    function Slice<T>(Self: sequence of T; from, step, count: integer): sequence of T; -
             from step > 0 count
    function Sorted<T>(Self: sequence of T): sequence of T; -
            
    function SortedDescending<T>(Self: sequence of T): sequence of T; -
            
    function SplitAt<T>(Self: sequence of T; ind: integer): (sequence of T, sequence of T); -
             ind.
    function Sum(Self: sequence of BigInteger): BigInteger; -
            
    function Tabulate<T, T1>(Self: sequence of T; f: T->T1): sequence of (T, T1); -
            
    function TakeLast<T>(Self: sequence of T; count: integer): sequence of T; -
             count
    function ToHashSet<T>(Self: sequence of T): HashSet<T>; -
             HashSet
    function ToLinkedList<T>(Self: sequence of T): LinkedList<T>; -
             LinkedList
    function ToSet<T>(Self: sequence of T): NewSet<T>; -
            
    function ToSortedSet<T>(Self: sequence of T): SortedSet<T>; -
             SortedSet
    function UnZipTuple<T, T1>(Self: sequence of (T, T1)): (sequence of T, sequence of T1); -
             .
    function UnZipTuple<T, T1, T2>(Self: sequence of (T, T1, T2)): (sequence of T, sequence of T1, sequence of T2); -
             .
    function UnZipTuple<T, T1, T2, T3>(Self: sequence of (T, T1, T2, T3)): (sequence of T, sequence of T1, sequence of T2, sequence of T3); -
             .
    function Windowed<T>(Self: sequence of T; n: integer): sequence of array of T; -
             , n
    function WriteLines(Self: sequence of string; fname: string): sequence of string; -
            
    function Zip<T, T1, T2, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2) -> TRes): sequence of TRes; -
             ,
    function Zip<T, T1, T2, T3, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3) -> TRes): sequence of TRes; -
             ,
    function Zip<T, T1, T2, T3, T4, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4) -> TRes): sequence of TRes; -
             ,
    function Zip<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1); -
            
    function Zip<T, T1, T2>(Self: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2); -
            
    function Zip<T, T1, T2, T3>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3); -
            
    function Zip<T, T1, T2, T3, T4>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4); -
            
    function ZipTuple<T, T1>(Self: sequence of T; a: sequence of T1): sequence of (T, T1); -
            
    function ZipTuple<T, T1, T2>(Self: sequence of T; a: sequence of T1; b: sequence of T2): sequence of (T, T1, T2); -
            
    function ZipTuple<T, T1, T2, T3>(Self: sequence of T; a: sequence of T1; b: sequence of T2; c: sequence of T3): sequence of (T, T1, T2, T3); -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for string.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for string.html index 89e8536db..2781e874f 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for string.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for string.html @@ -30,88 +30,88 @@ -

    string

    +

    Методы расширения типа string

    +
            Возвращает True если строка находится между двумя другими (лексикографическое сравнение) +
            Возвращает количество вхождений подстроки в строку +
            Возвращает количество вхождений символа в строку +
            Возвращает последовательность индексов вхождений подстроки в основную строкуПараметр overlay определяет, разрешены ли перекрытия вхождений подстрок +
            Возвращает True если строка находится в диапазоне [a,b] (лексикографическое сравнение) +
            Возвращает инверсию строки +
            Возвращает True если строку можно преобразовать в целое +
            Удовлетворяет ли строка регулярному выражению +
            Возвращает True если строку можно преобразовать в вещественное +
            Возвращает подстроку, полученную вырезанием из строки length самых левых символов +
            Ищет в указанной строке все вхождения регулярного выражения и возвращает их в виде последовательности элементов типа Match +
            Ищет в указанной строке первое вхождение регулярного выражения и возвращает его в виде строки +
            Ищет в указанной строке все вхождения регулярного выражения и возвращает их в виде последовательности строк +
            Возвращает случайный символ строки +
            Считывает целое из строки начиная с позиции from и устанавливает from за считанным значением +
            Считывает вещественное из строки начиная с позиции from и устанавливает from за считанным значением +
            Считывает слово из строки начиная с позиции from и устанавливает from за считанным значением +
            Заменяет в указанной строке все вхождения регулярного выражения указанной строкой замены и возвращает преобразованную строку +
            Заменяет в указанной строке все вхождения регулярного выражения указанным преобразованием замены и возвращает преобразованную строку +
            Удаляет в строке все вхождения указанных строк +
            Заменяет count вхождений подстроки oldStr на подстроку newStr в исходной строке +
            Возвращает подстроку, полученную вырезанием из строки length самых правых символов +
            Возвращает срез строки от индекса from с шагом step +
            Возвращает срез строки от индекса from с шагом step длины не более count +
            Преобразует строку в BigInteger +
            Преобразует строку в целое +
            Преобразует строку в целоеПри невозможности преобразования возвращается defaultvalue +
            Преобразует строку в массив целых +
            Считывает из строки массив из N целых +
            Преобразует многострочную строку в массив строк +
            Преобразует строку в вещественное +
            Преобразует строку в вещественное +
            Преобразует строку в вещественное +
            Преобразует строку в вещественноеПри невозможности преобразования возвращается defaultvalue +
            Преобразует строку в массив вещественных +
            Преобразует строку в массив вещественных +
            Преобразует строку в массив вещественных +
            Преобразует строку в массив слов +
            Преобразует строку в массив слов, используя в качестве разделителей символы из строки delims +
            Преобразует строку в целое и записывает его в value.При невозможности преобразования возвращается False +
            Преобразует строку в вещественное и записывает его в value.При невозможности преобразования возвращается False
    function Between(Self: string; a, b: string; inclusive: boolean := True): boolean; -
             True ( )
    function CountOf(Self: string; substring: string; allowOverlap: boolean := false): integer; -
            
    function CountOf(Self: string; c: char): integer; -
            
    function IndicesOf(Self, SubS: string; overlay: boolean := False): sequence of integer; -
             overlay ,
    function InRange(Self: string; a, b: string): boolean; -
             True [a,b] ( )
    function Inverse(Self: string): string; -
            
    function IsInteger(Self: string): boolean; -
             True
    function IsMatch(Self: string; reg: string; options: RegexOptions := RegexOptions.None): boolean; -
            
    function IsReal(Self: string): boolean; -
             True
    function Left(Self: string; length: integer): string; -
             , length
    function Matches(Self: string; reg: string; options: RegexOptions := RegexOptions.None): sequence of Match; -
             Match
    function MatchValue(Self: string; reg: string; options: RegexOptions := RegexOptions.None): string; -
            
    function MatchValues(Self: string; reg: string; options: RegexOptions := RegexOptions.None): sequence of string; -
            
    function RandomElement(Self: string): char; -
            
    function ReadInteger(Self: string; var from: integer): integer; -
             from from
    function ReadReal(Self: string; var from: integer): real; -
             from from
    function ReadWord(Self: string; var from: integer): string; -
             from from
    function RegexReplace(Self: string; reg, repl: string; options: RegexOptions := RegexOptions.None): string; -
            
    function RegexReplace(Self: string; reg: string; repl: Match->string; options: RegexOptions := RegexOptions.None): string; -
            
    function Remove(Self: string; params targets: array of string): string; -
            
    function Replace(Self: string; oldStr,newStr: string; count: integer): string; -
             count oldStr newStr
    function Right(Self: string; length: integer): string; -
             , length
    function Slice(Self: string; from, step: integer): string; -
             from step
    function Slice(Self: string; from, step, count: integer): string; -
             from step count
    function ToBigInteger(Self: string): BigInteger; -
             BigInteger
    function ToInteger(Self: string): integer; -
            
    function ToInteger(Self: string; defaultvalue: integer): integer; -
             defaultvalue
    function ToIntegers(Self: string): array of integer; -
            
    function ToIntegers(Self: string; N: integer): array of integer; -
             N
    function ToLines(Self: string): array of string; -
            
    function ToReal(Self: string): real; -
            
    function ToReal(Self: string; nfi: NumberFormatInfo): real; -
            
    function ToReal(Self: string; DecimalSeparator: string): real; -
            
    function ToReal(Self: string; defaultvalue: real): real; -
             defaultvalue
    function ToReals(Self: string): array of real; -
            
    function ToReals(Self: string; nfi: NumberFormatInfo): array of real; -
            
    function ToReals(Self: string; DecimalSeparator: string): array of real; -
            
    function ToWords(Self: string; params delim: array of char): array of string; -
            
    function ToWords(Self: string; delims: string := ' '): array of string; -
             , delims
    function TryToInteger(Self: string; var value: integer): boolean; -
             value. False
    function TryToReal(Self: string; var value: real): boolean; -
             value. False
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for typed files.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for typed files.html index 71874a283..3df766419 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for typed files.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for typed files.html @@ -9,26 +9,26 @@ -

    +

    Методы расширения типизированных файлов

    +
            Возвращает последовательность элементов открытого типизированного файла +
            Считывает и возвращает следующий элемент типизированного файла +
            Считывает и возвращает два следующих элемента типизированного файла в виде кортежа +
            Считывает и возвращает три следующих элемента типизированного файла в виде кортежа +
            Возвращает последовательность элементов открытого типизированного файла от текущего элемента до конечного +
            Открывает типизированный файл, возвращает последовательность его элементов и закрывает его +
            Открывает существующий типизированный файл +
            Создает новый или обнуляет существующий типизированный файл +
            Устанавливает текущую позицию файлового указателя в типизированном файле на элемент с номером n +
            Записывает данные в типизированный файл
    function Elements<T>(Self: file of T): sequence of T; -
            
    function Read<T>(Self: file of T): T; -
            
    function Read2<T>(Self: file of T): (T,T); -
            
    function Read3<T>(Self: file of T): (T,T,T); -
            
    function ReadElements<T>(Self: file of T): sequence of T; -
            
    function ReadElements<T>(fname: string): sequence of T; -
             ,
    procedure Reset<T>(Self: file of T); -
            
    procedure Rewrite<T>(Self: file of T); -
            
    function Seek<T>(Self: file of T; n: int64): file of T; -
             n
    procedure Write<T>(Self: file of T; params vals: array of T); -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Functions for Complex numbers.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Functions for Complex numbers.html index 5fab238e3..e5440fc7b 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Functions for Complex numbers.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Functions for Complex numbers.html @@ -12,30 +12,30 @@ -

    +

    Подпрограммы для работы с комплексными числами

    +
            Возвращает модуль комплексного числа +
            Возвращает комплексно сопряженное число +
            Возвращает косинус комплексного числа +
            Конструирует комплексное число с вещественной частью re и мнимой частью im +
            Конструирует комплексное число по полярным координатам +
            Возвращает экспоненту комплексного числа +
            Возвращает натуральный логарифм комплексного числа +
            Возвращает натуральный логарифм комплексного числа +
            Возвращает десятичный логарифм комплексного числа +
            Возвращает степень комплексного числа +
            Возвращает синус комплексного числа +
            Возвращает квадратный корень из комплексного числа
    function Abs(c: Complex): real; -
            
    function Conjugate(c: Complex): Complex; -
            
    function Cos(c: Complex): Complex; -
            
    function Cplx(re, im: real): Complex; -
             re im
    function CplxFromPolar(magnitude, phase: real): Complex; -
            
    function Exp(c: Complex): Complex; -
            
    function Ln(c: Complex): Complex; -
            
    function Log(c: Complex): Complex; -
            
    function Log10(c: Complex): Complex; -
            
    function Power(c, power: Complex): Complex; -
            
    function Sin(c: Complex): Complex; -
            
    function Sqrt(c: Complex): Complex; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Functions for file names.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Functions for file names.html index f204e74fc..526aa384e 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Functions for file names.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Functions for file names.html @@ -6,18 +6,18 @@ -

    +

    Подпрограммы для работы с именами файлов

    +
            Возвращает полное имя файла fileName +
            Выделяет имя диска и путь из полного имени файла fileName +
            Выделяет путь из полного имени файла fileName +
            Выделяет расширение из полного имени файла fileName +
            Выделяет имя файла из полного имени файла fileName +
            Выделяет путь из полного имени файла fileName
    function ExpandFileName(fileName: string): string; -
             fileName
    function ExtractFileDir(fileName: string): string; -
             fileName
    function ExtractFileDrive(fileName: string): string; -
             fileName
    function ExtractFileExt(fileName: string): string; -
             fileName
    function ExtractFileName(fileName: string): string; -
             fileName
    function ExtractFilePath(fileName: string): string; -
             fileName
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Infinite sequences.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Infinite sequences.html index 4a51d33bf..a6b1a370d 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Infinite sequences.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Infinite sequences.html @@ -2,14 +2,14 @@ -

    +

    Генерация бесконечных последовательностей

    +
            Повторяет последовательность бесконечное число раз +
            Возвращает бесконечную последовательность целых от текущего значения с шагом 1 +
            Возвращает бесконечную последовательность целых от текущего значения с шагом step +
            Возвращает бесконечную последовательность вещественных от текущего значения с шагом step
    function Cycle<T>(Self: sequence of T): sequence of T; -
            
    function Step(Self: integer): sequence of integer; -
             1
    function Step(Self: integer; step: integer): sequence of integer; -
             step
    function Step(Self: real; step: real): sequence of real; -
             step
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Math subroutines.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Math subroutines.html index 11943bd5d..e76dcae6c 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Math subroutines.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Math subroutines.html @@ -47,168 +47,168 @@ -

    - +

    Математические подпрограммы

    +
    function Abs(x: ): ; -
             x
    +
            Возвращает угол в радианах, косинус которого равен x, -1<=x<=1 +
            Возвращает угол в радианах, синус которого равен x, -1<=x<=1 +
            Возвращает угол в радианах, тангенс которого равен x +
            Возвращает угол (в радианах) между положительной осью X и вектором (x, y) с учётом квадранта +
            Возвращает кубический корень числа x (x может быть < 0) +
            Возвращает наименьшее целое >= x +
            Возвращает косинус угла x, измеряемого в радианах +
            Возвращает гиперболический косинус угла x, измеряемого в радианах +
            Переводит градусы в радианы +
            Возвращает экспоненту числа x +
            Возвращает наибольшее целое <= x +
            Возвращает дробную часть числа x +
            Возвращает наибольший общий делитель двух целых чисел +
            Возвращает наибольший общий делитель двух целых чисел +
            Возвращает наибольший общий делитель двух BigInteger +
            Возвращает гипотенузу треугольника с катетами x,y +
            Возвращает целую часть числа x +
            Вычисляет целочисленный квадратный корень из n.Возвращает наибольшее целое число r, такое что r? ? n < (r+1)?Если n является точным квадратом, возвращает точный корень +
            Вычисляет целочисленный квадратный корень из n.Возвращает наибольшее целое число r, такое что r? ? n < (r+1)?Если n является точным квадратом, возвращает точный корень +
            Возвращает наименьшее общее кратное двух целых чисел +
            Возвращает наименьшее общее кратное двух BigInteger +
            Возвращает значение на отрезке [a, b] в позиции t ? [0, 1]При t=0 — a, при t=1 — b, при t=0.5 — середина между ними +
            Возвращает натуральный логарифм числа x +
            Возвращает натуральный логарифм числа x +
            Возвращает десятичный логарифм числа x +
            Возвращает логарифм числа x по основанию 2 - +
            Возвращает логарифм числа x по основанию base + - +
            Возвращает максимальное из a,b,... + - +
            Возвращает минимальное из a,b,... + +
            Возвращает x в степени y +
            Возвращает x в целой степени n +
            Возвращает x в степени y +
            Переводит радианы в градусы +
            Возвращает случайное целое в диапазоне от 0 до maxValue-1 +
            Возвращает случайное вещественное в диапазоне [0,maxValue) +
            Возвращает случайное целое в диапазоне от a до b +
            Возвращает случайное вещественное в диапазоне [a,b) +
            Возвращает случайный символ в диапазоне от a до b +
            Возвращает случайное целое в диапазоне +
            Возвращает случайное вещественное в диапазоне +
            Возвращает случайный символ в диапазоне +
            Возвращает случайное вещественное в диапазоне [0..1) +
            Возвращает кортеж из двух случайных целых в диапазоне от 0 до maxValue-1 +
            Возвращает кортеж из двух случайных вещественных в диапазоне [0,maxValue) +
            Возвращает кортеж из двух случайных целых в диапазоне от a до b +
            Возвращает кортеж из двух случайных символов в диапазоне от a до b +
            Возвращает кортеж из двух случайных вещественных в диапазоне [a,b) +
            Возвращает кортеж из двух случайных целых в диапазоне +
            Возвращает кортеж из двух случайных символов в диапазоне +
            Возвращает кортеж из двух случайных вещественных в диапазоне +
            Возвращает кортеж из двух случайных вещественных в диапазоне [0..1) +
            Возвращает кортеж из трех случайных целых в диапазоне от 0 до maxValue-1 +
            Возвращает кортеж из трех случайных вещественных в диапазоне [0,maxValue) +
            Возвращает кортеж из трех случайных целых в диапазоне от a до b +
            Возвращает кортеж из трех случайных символов в диапазоне от a до b +
            Возвращает кортеж из трех случайных вещественных в диапазоне [a,b) +
            Возвращает кортеж из трех случайных целых в диапазоне +
            Возвращает кортеж из трех случайных символов в диапазоне +
            Возвращает кортеж из трех случайных вещественных в диапазоне +
            Возвращает кортеж из трех случайных вещественных в диапазоне [0..1) +
            Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности +
            Инициализирует датчик псевдослучайных чисел +
            Возвращает случайное вещественное в диапазоне [a,b], округленное до digits знаков после десятичной точки +
            Преобразует x из диапазона [a1,b1] в диапазон [a2,b2] с сохранением относительной позиции +
            Возвращает x, округленное до ближайшего целого. Если вещественное находится посередине между двумя целыми,то округление осуществляется к ближайшему четному (банковское округление): Round(2.5)=2, Round(3.5)=4 +
            Возвращает x, округленное до ближайшего вещественного с digits знаками после десятичной точки +
            Возвращает x, округленное до ближайшего длинного целого - +
            Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности + +
            Возвращает синус угла x, измеряемого в радианах - +
            Возвращает гиперболический синус угла x, измеряемого в радианах + +
            Возвращает квадратный корень числа x +
            Возвращает тангенс угла x, измеряемого в радианах +
            Возвращает гиперболический тангенс угла x, измеряемого в радианах +
            Возвращает целую часть вещественного числа x +
            Возвращает целую часть вещественного числа x как длинное целое
    function Abs(x: число): число; +
            Возвращает модуль числа x
    function ArcCos(x: real): real; -
             , x, -1<=x<=1
    function ArcSin(x: real): real; -
             , x, -1<=x<=1
    function ArcTan(x: real): real; -
             , x
    function Atan2(y, x: real): real; -
             ( ) X (x, y)
    function Cbrt(x: real): real; -
             x (x < 0)
    function Ceil(x: real): integer; -
             >= x
    function Cos(x: real): real; -
             x,
    function Cosh(x: real): real; -
             x,
    function DegToRad(x: real): real; -
            
    function Exp(x: real): real; -
             x
    function Floor(x: real): integer; -
             <= x
    function Frac(x: real): real; -
             x
    function GCD(a, b: integer): integer; -
            
    function GCD(a, b: int64): int64; -
            
    function GCD(a, b: BigInteger): BigInteger; -
             BigInteger
    function Hypot(x, y: real): real; -
             x,y
    function Int(x: real): real; -
             x
    function ISqrt(n: int64): int64; -
             n. r, r? ? n < (r+1)? n ,
    function ISqrt(n: BigInteger): BigInteger; -
             n. r, r? ? n < (r+1)? n ,
    function LCM(a, b: int64): int64; -
            
    function LCM(a, b: BigInteger): BigInteger; -
             BigInteger
    function Lerp(a, b, t: real): real; -
             [a, b] t ? [0, 1] t=0 a, t=1 b, t=0.5
    function Ln(x: real): real; -
             x
    function Log(x: real): real; -
             x
    function Log10(x: real): real; -
             x
    function Log2(x: real): real; -
             x 2
    function LogN(base, x: real): real; -
             x base
    function Max(a: , b: ): ; -
             a,b
    function Max(a: число, b: число): число; +
            Возвращает максимальное из чисел a,b
    function Max(a,b,...: T): T; -
             a,b,...
    function Min(a: , b: ): ; -
             a,b
    function Min(a: число, b: число): число; +
            Возвращает минимальное из чисел a,b
    function Min(a,b,...: T): T; -
             a,b,...
    function Odd(i: ): boolean; -
             True, i , False
    function Odd(i: целое): boolean; +
            Возвращает True, если i нечетно, и False в противном случае
    function Power(x, y: real): real; -
             x y
    function Power(x: real; n: integer): real; -
             x n
    function Power(x: BigInteger; y: integer): BigInteger; -
             x y
    function RadToDeg(x: real): real; -
            
    function Random(maxValue: integer): integer; -
             0 maxValue-1
    function Random(maxValue: real): real; -
             [0,maxValue)
    function Random(a, b: integer): integer; -
             a b
    function Random(a, b: real): real; -
             [a,b)
    function Random(a, b: char): char; -
             a b
    function Random(diap: IntRange): integer; -
            
    function Random(diap: RealRange): real; -
            
    function Random(diap: CharRange): char; -
            
    function Random: real; -
             [0..1)
    function Random2(maxValue: integer): (integer, integer); -
             0 maxValue-1
    function Random2(maxValue: real): (real, real); -
             [0,maxValue)
    function Random2(a, b: integer): (integer, integer); -
             a b
    function Random2(a, b: char): (char, char); -
             a b
    function Random2(a, b: real): (real, real); -
             [a,b)
    function Random2(diap: IntRange): (integer, integer); -
            
    function Random2(diap: CharRange): (char, char); -
            
    function Random2(diap: RealRange): (real, real); -
            
    function Random2: (real, real); -
             [0..1)
    function Random3(maxValue: integer): (integer, integer, integer); -
             0 maxValue-1
    function Random3(maxValue: real): (real, real, real); -
             [0,maxValue)
    function Random3(a, b: integer): (integer, integer, integer); -
             a b
    function Random3(a, b: char): (char, char, char); -
             a b
    function Random3(a, b: real): (real, real, real); -
             [a,b)
    function Random3(diap: IntRange): (integer, integer, integer); -
            
    function Random3(diap: CharRange): (char, char, char); -
            
    function Random3(diap: RealRange): (real, real, real); -
            
    function Random3: (real, real, real); -
             [0..1)
    procedure Randomize(seed: integer); -
             , seed. seed
    procedure Randomize; -
            
    function RandomReal(a, b: real; digits: integer := 2): real; -
             [a,b], digits
    function Remap(x, a1, b1, a2, b2: real): real; -
             x [a1,b1] [a2,b2]
    function Round(x: real): integer; -
             x, . , ( ): Round(2.5)=2, Round(3.5)=4
    function Round(x: real; digits: integer): real; -
             x, digits
    function RoundBigInteger(x: real): BigInteger; -
             x,
    procedure SetRandomSeed(seed: integer); -
             , seed. seed
    function Sign(x: ): integer; -
             -1, 0 +1 x
    function Sign(x: число): integer; +
            Возвращает -1, 0 или +1 в зависимости от знака числа x
    function Sin(x: real): real; -
             x,
    function Sinh(x: real): real; -
             x,
    function Sqr(x: ): ; -
             x
    function Sqr(x: число): число; +
            Возвращает квадрат числа x
    function Sqrt(x: real): real; -
             x
    function Tan(x: real): real; -
             x,
    function Tanh(x: real): real; -
             x,
    function Trunc(x: real): integer; -
             x
    function TruncBigInteger(x: real): BigInteger; -
             x
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Print for elementary types.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Print for elementary types.html index ae7f92eae..596b7b478 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Print for elementary types.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Print for elementary types.html @@ -2,34 +2,34 @@ -

    Print

    +

    Метод расширения Print для элементарных типов

    +
            Выводит значение на экран, после чего выводит пробел +
            Выводит значение на экран, после чего выводит пробел +
            Выводит значение на экран, после чего выводит пробел +
            Выводит значение на экран, после чего выводит пробел +
            Выводит значение на экран, после чего выводит пробел +
            Выводит значение на экран, после чего выводит пробел +
            Выводит значение на экран, после чего выводит пробел +
            Выводит значение на экран и переходит на новую строку +
            Выводит значение на экран и переходит на новую строку +
            Выводит значение на экран и переходит на новую строку +
            Выводит значение на экран и переходит на новую строку +
            Выводит значение на экран и переходит на новую строку +
            Выводит значение на экран и переходит на новую строку +
            Выводит значение на экран и переходит на новую строку
    function Print(Self: integer): integer; -
             ,
    function Print(Self: int64): int64; -
             ,
    function Print(Self: real): real; -
             ,
    function Print(Self: char): char; -
             ,
    function Print(Self: boolean): boolean; -
             ,
    function Print(Self: BigInteger): BigInteger; -
             ,
    function Print(Self: string): string; -
             ,
    function Println(Self: integer): integer; -
            
    function Println(Self: int64): int64; -
            
    function Println(Self: real): real; -
            
    function Println(Self: char): char; -
            
    function Println(Self: boolean): boolean; -
            
    function Println(Self: BigInteger): BigInteger; -
            
    function Println(Self: string): string; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Read subroutines.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Read subroutines.html index c3ad44713..7dee8782c 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Read subroutines.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Read subroutines.html @@ -42,200 +42,200 @@ -

    +

    Подпрограммы ввода

    - +
            Вводит значения a,b,... с клавиатуры + +
            Возвращает значение типа BigInteger, введенное с клавиатуры +
            Выводит приглашение к вводу и возвращает значение типа BigInteger, введенное с клавиатуры +
            Возвращает значение типа boolean, введенное с клавиатуры +
            Выводит приглашение к вводу и возвращает значение типа boolean, введенное с клавиатуры +
            Возвращает значение типа boolean, введенное из текстового файла f +
            Возвращает значение типа char, введенное с клавиатуры +
            Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры +
            Возвращает значение типа char, введенное из текстового файла f +
            Возвращает кортеж из двух значений типа char, введенных с клавиатуры +
            Возвращает кортеж из двух значений типа char, введенных с клавиатуры +
            Возвращает кортеж из трёх значений типа char, введенных с клавиатуры +
            Возвращает кортеж из трёх значений типа char, введенных с клавиатуры +
            Возвращает кортеж из четырёх значений типа char, введенных с клавиатуры +
            Возвращает кортеж из четырёх значений типа char, введенных с клавиатуры +
            Возвращает значение типа int64, введенное с клавиатуры +
            Выводит приглашение к вводу и возвращает значение типа int64, введенное с клавиатуры +
            Возвращает значение типа int64, введенное из текстового файла f +
            Возвращает значение типа integer, введенное с клавиатуры +
            Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры +
            Возвращает значение типа integer, введенное из текстового файла f +
            Возвращает кортеж из двух значений типа integer, введенных с клавиатуры +
            Возвращает кортеж из двух значений типа integer, введенных с клавиатуры +
            Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры +
            Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры +
            Возвращает кортеж из четырёх значений типа integer, введенных с клавиатуры +
            Возвращает кортеж из четырёх значений типа integer, введенных с клавиатуры +
            Возвращает следующую лексему +
            Возвращает следующую лексему из текстового файла f +
            Вводит значения a,b,... с клавиатуры и осуществляет переход на следующую строку +
            Вводит значения a,b,... из текстового файла f и осуществляет переход на следующую строку +
            Возвращает значение типа BigInteger, введенное с клавиатуры, и переходит на следующую строку ввода +
            Выводит приглашение к вводу и возвращает значение типа BigInteger, введенное с клавиатуры,и осуществляет переход на следующую строку ввода +
            Возвращает значение типа boolean, введенное с клавиатуры, и переходит на следующую строку ввода +
            Выводит приглашение к вводу и возвращает значение типа boolean, введенное с клавиатуры,и осуществляет переход на следующую строку ввода +
            Возвращает значение типа boolean, введенное из текстового файла f,и осуществляет переход на следующую строку +
            Возвращает значение типа char, введенное с клавиатуры, и переходит на следующую строку ввода +
            Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры,и осуществляет переход на следующую строку ввода +
            Возвращает значение типа char, введенное из текстового файла f,и осуществляет переход на следующую строку +
            Возвращает кортеж из двух значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из двух значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из трёх значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из трёх значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из четырёх значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из четырёх значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает значение типа int64, введенное с клавиатуры, и переходит на следующую строку ввода +
            Выводит приглашение к вводу и возвращает значение типа int64, введенное с клавиатуры,и осуществляет переход на следующую строку ввода +
            Возвращает значение типа int64, введенное из текстового файла f,и осуществляет переход на следующую строку +
            Возвращает значение типа integer, введенное с клавиатуры, и переходит на следующую строку ввода +
            Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры,и осуществляет переход на следующую строку ввода +
            Возвращает значение типа integer, введенное из текстового файла f,и осуществляет переход на следующую строку +
            Возвращает кортеж из двух значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из двух значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из четырёх значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из четырёх значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает значение типа real, введенное с клавиатуры, и переходит на следующую строку ввода +
            Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры,и осуществляет переход на следующую строку ввода +
            Возвращает значение типа real, введенное из текстового файла f,и осуществляет переход на следующую строку +
            Возвращает кортеж из двух значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из двух значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из трёх значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из трёх значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из четырёх значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из четырёх значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает значение типа string, введенное с клавиатуры, и переходит на следующую строку ввода +
            Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры,и осуществляет переход на следующую строку ввода +
            Возвращает значение типа string, введенное из текстового файла f,и осуществляет переход на следующую строку +
            Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из трёх значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из трёх значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из четырёх значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает кортеж из четырёх значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода +
            Возвращает значение типа real, введенное с клавиатуры +
            Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры +
            Возвращает значение типа real, введенное из текстового файла f +
            Возвращает кортеж из двух значений типа real, введенных с клавиатуры +
            Возвращает кортеж из двух значений типа real, введенных с клавиатуры +
            Возвращает кортеж из трёх значений типа real, введенных с клавиатуры +
            Возвращает кортеж из трёх значений типа real, введенных с клавиатуры +
            Возвращает кортеж из четырёх значений типа real, введенных с клавиатуры +
            Возвращает кортеж из четырёх значений типа real, введенных с клавиатуры +
            Возвращает значение типа string, введенное с клавиатуры +
            Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры +
            Возвращает значение типа string, введенное из текстового файла f +
            Возвращает кортеж из двух значений типа string, введенных с клавиатуры +
            Возвращает кортеж из двух значений типа string, введенных с клавиатуры +
            Возвращает кортеж из трёх значений типа string, введенных с клавиатуры +
            Возвращает кортеж из трёх значений типа string, введенных с клавиатуры +
            Возвращает кортеж из четырёх значений типа string, введенных с клавиатуры - - +
            Возвращает кортеж из четырёх значений типа string, введенных с клавиатуры + + +
            Вводит логическое значение x с клавиатуры. Возвращает False если при вводе произошла ошибка
    procedure Read(a,b,...); -
             a,b,...
    procedure Read(f: ; a,b,...); -
             a,b,... f
    procedure Read(f: файл; a,b,...); +
            Вводит значения a,b,... из файла f
    function ReadBigInteger: BigInteger; -
             BigInteger,
    function ReadBigInteger(prompt: string): BigInteger; -
             BigInteger,
    function ReadBoolean: boolean; -
             boolean,
    function ReadBoolean(prompt: string): boolean; -
             boolean,
    function ReadBoolean(f: Text): boolean; -
             boolean, f
    function ReadChar: char; -
             char,
    function ReadChar(prompt: string): char; -
             char,
    function ReadChar(f: Text): char; -
             char, f
    function ReadChar2: (char, char); -
             char,
    function ReadChar2(prompt: string): (char, char); -
             char,
    function ReadChar3: (char, char, char); -
             char,
    function ReadChar3(prompt: string): (char, char, char); -
             char,
    function ReadChar4: (char, char, char, char); -
             char,
    function ReadChar4(prompt: string): (char, char, char, char); -
             char,
    function ReadInt64: int64; -
             int64,
    function ReadInt64(prompt: string): int64; -
             int64,
    function ReadInt64(f: Text): int64; -
             int64, f
    function ReadInteger: integer; -
             integer,
    function ReadInteger(prompt: string): integer; -
             integer,
    function ReadInteger(f: Text): integer; -
             integer, f
    function ReadInteger2: (integer, integer); -
             integer,
    function ReadInteger2(prompt: string): (integer, integer); -
             integer,
    function ReadInteger3: (integer, integer, integer); -
             integer,
    function ReadInteger3(prompt: string): (integer, integer, integer); -
             integer,
    function ReadInteger4: (integer, integer, integer, integer); -
             integer,
    function ReadInteger4(prompt: string): (integer, integer, integer, integer); -
             integer,
    function ReadLexem: string; -
            
    function ReadLexem(f: Text): string; -
             f
    procedure Readln(a,b,...); -
             a,b,...
    procedure Readln(f: Text; a,b,...); -
             a,b,... f
    function ReadlnBigInteger: BigInteger; -
             BigInteger, ,
    function ReadlnBigInteger(prompt: string): BigInteger; -
             BigInteger, ,
    function ReadlnBoolean: boolean; -
             boolean, ,
    function ReadlnBoolean(prompt: string): boolean; -
             boolean, ,
    function ReadlnBoolean(f: Text): boolean; -
             boolean, f,
    function ReadlnChar: char; -
             char, ,
    function ReadlnChar(prompt: string): char; -
             char, ,
    function ReadlnChar(f: Text): char; -
             char, f,
    function ReadlnChar2: (char, char); -
             char, ,
    function ReadlnChar2(prompt: string): (char, char); -
             char, ,
    function ReadlnChar3: (char, char, char); -
             char, ,
    function ReadlnChar3(prompt: string): (char, char, char); -
             char, ,
    function ReadlnChar4: (char, char, char, char); -
             char, ,
    function ReadlnChar4(prompt: string): (char, char, char, char); -
             char, ,
    function ReadlnInt64: int64; -
             int64, ,
    function ReadlnInt64(prompt: string): int64; -
             int64, ,
    function ReadlnInt64(f: Text): int64; -
             int64, f,
    function ReadlnInteger: integer; -
             integer, ,
    function ReadlnInteger(prompt: string): integer; -
             integer, ,
    function ReadlnInteger(f: Text): integer; -
             integer, f,
    function ReadlnInteger2: (integer, integer); -
             integer, ,
    function ReadlnInteger2(prompt: string): (integer, integer); -
             integer, ,
    function ReadlnInteger3: (integer, integer, integer); -
             integer, ,
    function ReadlnInteger3(prompt: string): (integer, integer, integer); -
             integer, ,
    function ReadlnInteger4: (integer, integer, integer, integer); -
             integer, ,
    function ReadlnInteger4(prompt: string): (integer, integer, integer, integer); -
             integer, ,
    function ReadlnReal: real; -
             real, ,
    function ReadlnReal(prompt: string): real; -
             real, ,
    function ReadlnReal(f: Text): real; -
             real, f,
    function ReadlnReal2: (real, real); -
             real, ,
    function ReadlnReal2(prompt: string): (real, real); -
             real, ,
    function ReadlnReal3: (real, real, real); -
             real, ,
    function ReadlnReal3(prompt: string): (real, real, real); -
             real, ,
    function ReadlnReal4: (real, real, real, real); -
             real, ,
    function ReadlnReal4(prompt: string): (real, real, real, real); -
             real, ,
    function ReadlnString: string; -
             string, ,
    function ReadlnString(prompt: string): string; -
             string, ,
    function ReadlnString(f: Text): string; -
             string, f,
    function ReadlnString2: (string, string); -
             string, ,
    function ReadlnString2(prompt: string): (string, string); -
             string, ,
    function ReadlnString3: (string, string, string); -
             string, ,
    function ReadlnString3(prompt: string): (string, string, string); -
             string, ,
    function ReadlnString4: (string, string, string, string); -
             string, ,
    function ReadlnString4(prompt: string): (string, string, string, string); -
             string, ,
    function ReadReal: real; -
             real,
    function ReadReal(prompt: string): real; -
             real,
    function ReadReal(f: Text): real; -
             real, f
    function ReadReal2: (real, real); -
             real,
    function ReadReal2(prompt: string): (real, real); -
             real,
    function ReadReal3: (real, real, real); -
             real,
    function ReadReal3(prompt: string): (real, real, real); -
             real,
    function ReadReal4: (real, real, real, real); -
             real,
    function ReadReal4(prompt: string): (real, real, real, real); -
             real,
    function ReadString: string; -
             string,
    function ReadString(prompt: string): string; -
             string,
    function ReadString(f: Text): string; -
             string, f
    function ReadString2: (string, string); -
             string,
    function ReadString2(prompt: string): (string, string); -
             string,
    function ReadString3: (string, string, string); -
             string,
    function ReadString3(prompt: string): (string, string, string); -
             string,
    function ReadString4: (string, string, string, string); -
             string,
    function ReadString4(prompt: string): (string, string, string, string); -
             string,
    function TryRead(var x: ): boolean; -
             x . False
    function TryRead(var x: ; message: string): boolean; -
             x . False
    function TryRead(var x: число): boolean; +
            Вводит числовое значение x с клавиатуры. Возвращает False если при вводе произошла ошибка
    function TryRead(var x: число; message: string): boolean; +
            Выводит приглашение к вводу и вводит числовое значение x с клавиатуры. Возвращает False если при вводе произошла ошибка
    function TryRead(var x: boolean; message: string := ''): boolean; -
             x . False
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Short functions Lst, HSet, SSet, Dict, KV.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Short functions Lst, HSet, SSet, Dict, KV.html index b8e1976c1..d705e9ebe 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Short functions Lst, HSet, SSet, Dict, KV.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Short functions Lst, HSet, SSet, Dict, KV.html @@ -17,64 +17,64 @@ -

    Lst, LLst, HSet, SSet, Dict, KV

    +

    Короткие функции Lst, LLst, HSet, SSet, Dict, KV

    +
            Возвращает словарь из набора пар элементов (ключ, значение) +
            Возвращает словарь из набора пар элементов (ключ, значение), заданных как кортежи +
            Возвращает словарь из последовательности пар элементов (ключ, значение) +
            Возвращает словарь из последовательности пар элементов (ключ, значение), заданных как кортежи +
            Возвращает словарь словарь из двух последовательностей — ключей и значений +
            Возвращает словарь из набора пар элементов (целое, целое) +
            Возвращает словарь из набора пар элементов (строка, строка) +
            Возвращает словарь из набора пар элементов (строка, целое) +
            Возвращает множество на базе хеш таблицы, заполненное указанными значениями +
            Возвращает множество на базе хеш таблицы, заполненное значениями из последовательности +
            Возвращает множество на базе хеш таблицы, заполненное диапазоном значений +
            Возвращает множество на базе хеш таблицы, заполненное заполненный диапазоном значений +
            Возвращает множество на базе хеш таблицы, заполненное целыми значениями +
            Возвращает множество на базе хеш таблицы, заполненное строковыми значениями +
            Возвращает пару элементов (ключ, значение) +
            Возвращает двусвязный список, заполненный указанными значениями +
            Возвращает двусвязный список, заполненный значениями из последовательности +
            Возвращает список, заполненный указанными значениями +
            Возвращает список, заполненный значениями из последовательности +
            Возвращает список, заполненный диапазоном значений +
            Возвращает список, заполненный диапазоном значений +
            Возвращает список, заполненный указанными целыми значениями +
            Возвращает список, заполненный указанными целыми значениями +
            Возвращает пару элементов (ключ, значение) +
            Возвращает множество, заполненное указанными значениями +
            Возвращает множество на базе бинарного дерева поиска, заполненное указанными значениями +
            Возвращает множество на базе бинарного дерева поиска, заполненное значениями из последовательности +
            Возвращает множество на базе бинарного дерева поиска, заполненное целыми значениями +
            Возвращает множество на базе бинарного дерева поиска, заполненное строковыми значениями
    function Dict<TKey, TVal>(params pairs: array of KeyValuePair<TKey, TVal>): Dictionary<TKey, TVal>; -
             (, )
    function Dict<TKey, TVal>(params pairs: array of (TKey, TVal)): Dictionary<TKey, TVal>; -
             (, ),
    function Dict<TKey, TVal>(pairs: sequence of KeyValuePair<TKey, TVal>): Dictionary<TKey, TVal>; -
             (, )
    function Dict<TKey, TVal>(pairs: sequence of (TKey, TVal)): Dictionary<TKey, TVal>; -
             (, ),
    function Dict<TKey, TVal>(keys: sequence of TKey; values: sequence of TVal): Dictionary<TKey, TVal>; -
            
    function DictInt(params pairs: array of (integer, integer)): Dictionary<integer, integer>; -
             (, )
    function DictStr(params pairs: array of (string, string)): Dictionary<string, string>; -
             (, )
    function DictStrInt(params pairs: array of (string, integer)): Dictionary<string, integer>; -
             (, )
    function HSet<T>(params a: array of T): HashSet<T>; -
             ,
    function HSet<T>(a: sequence of T): HashSet<T>; -
             ,
    function HSet(a: IntRange): HashSet<integer>; -
             ,
    function HSet(a: CharRange): HashSet<char>; -
             ,
    function HSetInt(params a: array of integer): HashSet<integer>; -
             ,
    function HSetStr(params a: array of string): HashSet<string>; -
             ,
    function KV<TKey, TVal>(key: TKey; value: TVal): KeyValuePair<TKey, TVal>; -
             (, )
    function LLst<T>(params a: array of T): LinkedList<T>; -
             ,
    function LLst<T>(a: sequence of T): LinkedList<T>; -
             ,
    function Lst<T>(params a: array of T): List<T>; -
             ,
    function Lst<T>(a: sequence of T): List<T>; -
             ,
    function Lst(a: IntRange): List<integer>; -
             ,
    function Lst(a: CharRange): List<char>; -
             ,
    function LstInt(params a: array of integer): List<integer>; -
             ,
    function LstStr(params a: array of string): List<string>; -
             ,
    function Pair<TKey, TVal>(key: TKey; value: TVal): KeyValuePair<TKey, TVal>; -
             (, )
    function SetOf<T>(params a: array of T): NewSet<T>; -
             ,
    function SSet<T>(params a: array of T): SortedSet<T>; -
             ,
    function SSet<T>(a: sequence of T): SortedSet<T>; -
             ,
    function SSetInt(params a: array of integer): SortedSet<integer>; -
             ,
    function SSetStr(params a: array of string): SortedSet<string>; -
             ,
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Standard constants.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Standard constants.html index 82ed077bd..161c0419a 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Standard constants.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Standard constants.html @@ -18,42 +18,42 @@ -

    - +

    Стандартные константы

    +
    AllDelimiters = ' <>=^`|~$!"#%''()*,+-./:;?@[\]_{}'#9#10#13; -
             - -
    +
            Константа E +
            Максимальное значение типа byte +
            Максимальное значение типа double +
            Максимальное значение типа integer +
            Максимальное значение типа int64 +
            Максимальное значение типа longword +
            Максимальное значение типа real +
            Максимальное значение типа shortint +
            Максимальное значение типа single +
            Максимальное значение типа smallint +
            Максимальное значение типа uint64 +
            Максимальное значение типа word +
            Минимальное положительное значение типа double +
            Минимальное положительное значение типа real +
            Минимальное положительное значение типа single +
            Константа перехода на новую строку +
            Константа Pi
    AllDelimiters = ' <>=^`|~$№§!"#%''()*,+-./:;?@[\]_{}«­·»'#9#10#13; +
            Константа - символы-разделители слов
    E = 2.718281828459045; -
             E
    MaxByte = byte.MaxValue; -
             byte
    MaxDouble = real.MaxValue; -
             double
    MaxInt = integer.MaxValue; -
             integer
    MaxInt64 = int64.MaxValue; -
             int64
    MaxLongWord = longword.MaxValue; -
             longword
    MaxReal = real.MaxValue; -
             real
    MaxShortInt = shortint.MaxValue; -
             shortint
    MaxSingle = single.MaxValue; -
             single
    MaxSmallInt = smallint.MaxValue; -
             smallint
    MaxUInt64 = uint64.MaxValue; -
             uint64
    MaxWord = word.MaxValue; -
             word
    MinDouble = real.Epsilon; -
             double
    MinReal = real.Epsilon; -
             real
    MinSingle = single.Epsilon; -
             single
    NewLine = System.Environment.NewLine; -
            
    Pi = 3.141592653589793; -
             Pi
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Standard types.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Standard types.html index 6fd2f2b72..ecd5f941e 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Standard types.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Standard types.html @@ -63,132 +63,132 @@ -

    +

    Стандартные типы

    +
            Представляет действие с одним параметром +
            Представляет действие без параметров +
            Представляет действие с двумя параметрами +
            Представляет действие с тремя параметрами +
            Представляет произвольно большое целое число +
            Представляет базовый класс для реализации интерфейса IComparer +
            Представляет комплексное число +
            Класс, управляющий консольным окном и консольным вводом-выводом +
            Преобразует значение одного базового типа к другому базовому типу +
            Представляет дату и время +
            Представляет 128-битное вещественное число +
            Представляет ассоциативный массив (набор пар Ключ-Значение), реализованный на базе хеш-таблицы +
            Тип кодировки символов +
            Базовый тип исключений +
            Представляет строку с эффективным изменением +
            Представляет функцию с одним параметром +
            Представляет функцию без параметров +
            Представляет функцию с двумя параметрами +
            Представляет функцию с тремя параметрами +
            Класс, управляющий сборкой мусора +
            Представляет множество значений, реализованное на базе хеш-таблицы +
            Представляет интерфейс для коллекции +
            Представляет базовый класс для реализации интерфейса IComparer +
            Представляет интерфейс для сравнения двух элементов +
            Представляет интерфейс для набора пар Ключ-Значение +
            Представляет интерфейс, предоставляющий перечислитель для перебора элементов коллекции +
            Представляет интерфейс для перебора элементов коллекции +
            Представляет интерфейс для поддержки сравнения на равенство +
            Представляет интерфейс для коллекции с доступом по индексу +
            Представляет функцию с одним параметром целого типа, возвращающую целое +
            Представляет интерфейс для множества +
            Представляет пару Ключ-Значение для ассоциативного массива +
            Представляет двусвязный список +
            Представляет узел двусвязного списка +
            Представляет список на базе динамического массива +
            Представляет результаты из отдельного совпадения регулярного выражения +
            Представляет набор успешных совпадений регулярного выражения +
            Представляет метод, вызываемый при обнаружении совпадения в Regex.Replace +
            Указывает, что поле сериализуемого класса не должно быть сериализовано +
            Сведения для форматирования числовых значений +
            Базовый тип объектов +
            Представляет функцию с одним параметром, возвращающую boolean +
            Представляет функцию с двумя параметрами, возвращающую boolean +
            Представляет функцию с тремя параметрами, возвращающую boolean +
            Представляет очередь - набор элементов, реализованных по принципу "первый вошел-первый вышел" +
            Представляет функцию с одним параметром вещественного типа, возвращающую вещественное +
            Представляет регулярное выражение +
            Представляет результаты из одной группы при выполнении Regex.Match +
            Представляет результаты из набора групп при выполнении Regex.Match +
            Представляет параметры регулярного выражения +
            Указывает на возможность сериализации класса +
            Представляет тип короткой строки фиксированной длины 255 символов +
            Представляет ассоциативный массив, реализованный на базе бинарного дерева поиска +
            Представляет ассоциативный массив (набор пар ключ-значение), реализованный на базе динамического массива пар +
            Представляет множество значений, реализованное на базе бинарного дерева поиска +
            Представляет стек - набор элементов, реализованных по принципу "последний вошел-первый вышел" +
            Предоставляет методы для точного измерения затраченного времени +
            Представляет изменяемую строку символов +
            Представляет функцию с одним параметром строкового типа, возвращающую строку +
            Представляет кортеж
    Action<T> = System.Action<T>; -
            
    Action0 = System.Action; -
            
    Action2<T1, T2> = System.Action<T1, T2>; -
            
    Action3<T1, T2, T3> = System.Action<T1, T2, T3>; -
            
    BigInteger = System.Numerics.BigInteger; -
            
    cardinal = System.UInt32;
            cardinal = longword
    Comparer<T> = System.Collections.Generic.Comparer<T>; -
             IComparer
    Complex = System.Numerics.Complex; -
            
    Console = System.Console; -
            , -
    Convert = System.Convert; -
            
    DateTime = System.DateTime; -
            
    decimal = System.Decimal; -
             128-
    Dictionary<Key, Value> = System.Collections.Generic.Dictionary<Key, Value>; -
             ( -), -
    double = System.Double;
            double = real
    Encoding = System.Text.Encoding; -
            
    Exception = System.Exception; -
            
    faststring = StringBuilder; -
            
    Func<T, Res> = System.Func<T, Res>; -
            
    Func0<Res> = System.Func<Res>; -
            
    Func2<T1, T2, Res> = System.Func<T1, T2, Res>; -
            
    Func3<T1, T2, T3, Res> = System.Func<T1, T2, T3, Res>; -
            
    GC = System.GC; -
            ,
    HashSet<T> = System.Collections.Generic.HashSet<T>; -
             , -
    ICollection<T> = System.Collections.Generic.ICollection<T>; -
            
    IComparable<T> = IComparable<T>; -
             IComparer
    IComparer<T> = System.Collections.Generic.IComparer<T>; -
            
    IDictionary<Key, Value> = System.Collections.Generic.IDictionary<Key, Value>; -
             -
    IEnumerable<T> = System.Collections.Generic.IEnumerable<T>; -
             ,
    IEnumerator<T> = System.Collections.Generic.IEnumerator<T>; -
            
    IEqualityComparer<T> = System.Collections.Generic.IEqualityComparer<T>; -
            
    IList<T> = System.Collections.Generic.IList<T>; -
            
    IntFunc = Func<integer, integer>; -
             ,
    ISet<T> = System.Collections.Generic.ISet<T>; -
            
    KeyValuePair<Key, Value> = System.Collections.Generic.KeyValuePair<Key, Value>; -
             -
    LinkedList<T> = System.Collections.Generic.LinkedList<T>; -
            
    LinkedListNode<T> = System.Collections.Generic.LinkedListNode<T>; -
            
    List<T> = System.Collections.Generic.List<T>; -
            
    longint = System.Int32;
            longint = integer
    Match = System.Text.RegularExpressions.Match; -
            
    MatchCollection = System.Text.RegularExpressions.MatchCollection; -
            
    MatchEvaluator = System.Text.RegularExpressions.MatchEvaluator; -
             , Regex.Replace
    NonSerialized = System.NonSerializedAttribute; -
            ,
    NumberFormatInfo = System.Globalization.NumberFormatInfo; -
            
    Object = System.Object; -
            
    Predicate<T> = System.Predicate<T>; -
             , boolean
    Predicate2<T1, T2> = function(x1: T1; x2: T2): boolean; -
             , boolean
    Predicate3<T1, T2, T3> = function(x1: T1; x2: T2; x3: T3): boolean; -
             , boolean
    Queue<T> = System.Collections.Generic.Queue<T>; -
             - , " - "
    RealFunc = Func<real, real>; -
             ,
    Regex = System.Text.RegularExpressions.Regex; -
            
    RegexGroup = System.Text.RegularExpressions.Group; -
             Regex.Match
    RegexGroupCollection = System.Text.RegularExpressions.GroupCollection; -
             Regex.Match
    RegexOptions = System.Text.RegularExpressions.RegexOptions; -
            
    Serializable = System.SerializableAttribute; -
            
    ShortString = string[255]; -
             255
    SortedDictionary<Key, Value> = System.Collections.Generic.SortedDictionary<Key, Value>; -
             ,
    SortedList<Key, Value> = System.Collections.Generic.SortedList<Key, Value>; -
             ( -),
    SortedSet<T> = System.Collections.Generic.SortedSet<T>; -
             ,
    Stack<T> = System.Collections.Generic.Stack<T>; -
             - , " - "
    Stopwatch = System.Diagnostics.Stopwatch; -
            
    StringBuilder = System.Text.StringBuilder; -
            
    StringFunc = Func<string, string>; -
             ,
    Tuple = System.Tuple; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T generation.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T generation.html index 887bd0b48..e35091a9e 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T generation.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T generation.html @@ -10,48 +10,48 @@ -

    +

    Подпрограммы для создания одномерных массивов

    +
            Возвращает массив, заполненный указанными значениями +
            Возвращает массив, заполненный значениями из последовательности +
            Возвращает массив, заполненный диапазоном значений +
            Возвращает массив, заполненный диапазоном значений +
            Возвращает массив из count элементов x +
            Возвращает массив из count элементов, заполненных значениями gen(i) +
            Возвращает массив из count элементов, заполненных значениями gen(i), начиная с i=from +
            Возвращает массив из count элементов, начинающихся с first, с функцией next перехода от предыдущего к следующему +
            Возвращает массив из count элементов, начинающихся с first и second, с функцией next перехода от двух предыдущих к следующему +
            Возвращает массив размера n, заполненный случайными целыми значениями +
            Возвращает массив размера n, заполненный случайными целыми значениями в диапазоне от a до b +
            Возвращает массив размера n, заполненный случайными целыми значениями +
            Возвращает массив размера n, заполненный случайными вещественными значениями в диапазоне от a до b +
            Возвращает массив размера n, заполненный случайными вещественными значениями +
            Возвращает массив из n целых int64, введенных с клавиатуры +
            Возвращает массив из n целых, введенных с клавиатуры +
            Выводит приглашение к вводу и возвращает массив из n целых, введенных с клавиатуры +
            Возвращает массив из n вещественных, введенных с клавиатуры +
            Выводит приглашение к вводу и возвращает массив из n вещественных, введенных с клавиатуры +
            Возвращает массив из n строк, введенных с клавиатуры +
            Выводит приглашение к вводу и возвращает массив из n строк, введенных с клавиатуры
    function Arr<T>(params a: array of T): array of T; -
             ,
    function Arr<T>(a: sequence of T): array of T; -
             ,
    function Arr(a: IntRange): array of integer; -
             ,
    function Arr(a: CharRange): array of char; -
             ,
    function ArrFill<T>(count: integer; x: T): array of T; -
             count x
    function ArrGen<T>(count: integer; gen: integer->T): array of T; -
             count , gen(i)
    function ArrGen<T>(count: integer; gen: integer->T; from: integer): array of T; -
             count , gen(i), i=from
    function ArrGen<T>(count: integer; first: T; next: T->T): array of T; -
             count , first, next
    function ArrGen<T>(count: integer; first, second: T; next: (T,T) ->T): array of T; -
             count , first second, next
    function ArrRandom(n: integer := 10; a: integer := 0; b: integer := 100): array of integer; -
             n,
    function ArrRandomInteger(n: integer; a: integer; b: integer): array of integer; -
             n, a b
    function ArrRandomInteger(n: integer := 10): array of integer; -
             n,
    function ArrRandomReal(n: integer; a: real; b: real; digits: integer := 2): array of real; -
             n, a b
    function ArrRandomReal(n: integer := 10; digits: integer := 2): array of real; -
             n,
    function ReadArrInt64(n: integer): array of int64; -
             n int64,
    function ReadArrInteger(n: integer): array of integer; -
             n ,
    function ReadArrInteger(prompt: string; n: integer): array of integer; -
             n ,
    function ReadArrReal(n: integer): array of real; -
             n ,
    function ReadArrReal(prompt: string; n: integer): array of real; -
             n ,
    function ReadArrString(n: integer): array of string; -
             n ,
    function ReadArrString(prompt: string; n: integer): array of string; -
             n ,
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T.html index bc565fe5d..abf0e2107 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T.html @@ -12,82 +12,82 @@ -

    +

    Подпрограммы для работы с динамическими массивами

    +
            Проверяет равенство двух массивов +
            Создаёт копию массива +
            Возвращает верхнюю границу массива +
            Возвращает длину массива +
            Возвращает длину массива по размерности dim +
            Возвращает 0 +
            Проверяет равенство двух матриц +
            Возвращает следующую перестановку в массиве; возвращает False, если это последняя +
            Изменяет порядок элементов в массиве на противоположный +
            Изменяет порядок элементов на противоположный в диапазоне массива длины count, начиная с индекса index +
            Изменяет порядок элементов в списке на противоположный +
            Изменяет порядок элементов на противоположный в диапазоне списка длины count, начиная с индекса index +
            Изменяет порядок символов в строке на противоположный +
            Изменяет порядок символов в части строки длины count на противоположный, начиная с индекса index +
            Устанавливает длину одномерного массива. Старое содержимое сохраняется +
            Устанавливает размеры n-мерного массива. Старое содержимое сохраняется +
            Случайно перемешивает элементы массива +
            Случайно перемешивает элементы списка +
            Сортирует массив по возрастанию +
            Сортирует массив по возрастанию +
            Сортирует массив по критерию сортировки, задаваемому функцией сравнения cmp +
            Сортирует массив по критерию сортировки, задаваемому функцией сравнения less +
            Сортирует массив по ключу +
            Сортирует массив по ключу +
            Сортирует список по возрастанию +
            Сортирует список по возрастанию +
            Сортирует список по критерию сортировки, задаваемому функцией сравнения cmp +
            Сортирует список по критерию сортировки, задаваемому функцией сравнения less +
            Сортирует список по возрастанию по ключу +
            Сортирует список по возрастанию по ключу +
            Сортирует массив по убыванию +
            Сортирует массив по убыванию +
            Сортирует массив по убыванию по ключу +
            Сортирует массив по убыванию по ключу +
            Сортирует список по убыванию +
            Сортирует список по убыванию +
            Сортирует список по убыванию по ключу +
            Сортирует список по убыванию по ключу
    function ArrEqual<T>(a, b: array of T): boolean; -
            
    function Copy(a: array of T): array of T; -
            
    function High(a: array of T): integer; -
            
    function Length(a: array of T): integer; -
            
    function Length(a: array of T; dim: integer): integer; -
             dim
    function Low(a: array of T): integer; -
             0
    function MatrEqual<T>(a, b: array [,] of T): boolean; -
            
    function NextPermutation(a: array of integer): boolean; -
             ; False,
    procedure Reverse<T>(a: array of T); -
            
    procedure Reverse<T>(a: array of T; index, count: integer); -
             count, index
    procedure Reverse<T>(a: List<T>); -
            
    procedure Reverse<T>(a: List<T>; index, count: integer); -
             count, index
    procedure Reverse(var s: string); -
            
    procedure Reverse(var s: string; index, count: integer); -
             count , index
    procedure SetLength(var a: array of T; n: integer); -
             .
    procedure SetLength(var a: array [,...,] of T; n1,n2,...: integer); -
             n- .
    procedure Shuffle<T>(a: array of T); -
            
    procedure Shuffle<T>(l: List<T>); -
            
    procedure Sort<T>(a: array of T); -
            
    procedure Sort(a: array of string); -
            
    procedure Sort<T>(a: array of T; cmp: (T,T)->integer); -
             , cmp
    procedure Sort<T>(a: array of T; less: (T,T)->boolean); -
             , less
    procedure Sort<T,TKey>(a: array of T; keySelector: T->TKey); -
            
    procedure Sort<T>(a: array of T; keySelector: T->string); -
            
    procedure Sort<T>(l: List<T>); -
            
    procedure Sort(var l: List<string>); -
            
    procedure Sort<T>(l: List<T>; cmp: (T,T)->integer); -
             , cmp
    procedure Sort<T>(l: List<T>; less: (T,T)->boolean); -
             , less
    procedure Sort<T,T1>(var l: List<T>; keySelector: T->T1); -
            
    procedure Sort<T>(var l: List<T>; keySelector: T->string); -
            
    procedure SortDescending<T>(a: array of T); -
            
    procedure SortDescending(a: array of string); -
            
    procedure SortDescending<T,T1>(var a: array of T; keySelector: T->T1); -
            
    procedure SortDescending<T>(var a: array of T; keySelector: T->string); -
            
    procedure SortDescending<T>(l: List<T>); -
            
    procedure SortDescending(var l: List<string>); -
            
    procedure SortDescending<T,T1>(var l: List<T>; keySelector: T->T1); -
            
    procedure SortDescending<T>(var l: List<T>; keySelector: T->string); -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for binary files.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for binary files.html index 841742988..9f2343e2d 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for binary files.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for binary files.html @@ -6,30 +6,30 @@ -

    - - - - - - - - - - - - +

    Подпрограммы для работы с двоичными файлами

    +
    function FilePos(f: ): int64; -
            
    function FileSize(f: ): int64; -
            
    procedure Reset(f: ); -
             . - file of T, file
    procedure Reset(f: ; fileName: string); -
             f name . - file of T, file
    procedure Reset(f: ; en: Encoding); -
             . - file of T, file
    procedure Reset(f: ; fileName: string; en: Encoding); -
             f fileName . - file of T, file
    procedure Rewrite(f: ); -
             , . , . - file of T, file
    procedure Rewrite(f: ; fileName: string); -
             f fileName , . - file of T, file
    procedure Rewrite(f: ; en: Encoding); -
             , . , . - file of T, file
    procedure Rewrite(f: ; fileName: string; en: Encoding); -
             f fileName , . - file of T, file
    procedure Seek(f: ; n: int64); -
            
    procedure Truncate(f: ); -
             , . - file of T, file
    + + + + + + + + + + +
    function FilePos(f: двоичный файл): int64; +
            Возвращает текущую позицию файлового указателя в двоичном файле
    function FileSize(f: двоичный файл): int64; +
            Возвращает количество элементов в двоичном файле
    procedure Reset(f: двоичный файл); +
            Открывает двоичный файл на чтение и запись.Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file
    procedure Reset(f: двоичный файл; fileName: string); +
            Связывает файловую переменную f с файлом name на диске и открывает двоичный файл на чтение и запись.Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file
    procedure Reset(f: двоичный файл; en: Encoding); +
            Открывает двоичный файл на чтение и запись в заданной кодировке.Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file
    procedure Reset(f: двоичный файл; fileName: string; en: Encoding); +
            Связывает файловую переменную f с файлом fileName на диске и открывает двоичный файл на чтение и запись в заданной кодировке.Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file
    procedure Rewrite(f: двоичный файл); +
            Открывает двоичный файл на чтение и запись, при этом обнуляя его содержимое. Если файл существовал, он обнуляется.Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file
    procedure Rewrite(f: двоичный файл; fileName: string); +
            Связывает файловую переменную f с файлом fileName на диске и открывает двоичный файл на чтение и запись, при этом обнуляя его содержимое.Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file
    procedure Rewrite(f: двоичный файл; en: Encoding); +
            Открывает двоичный файл на чтение и запись в заданной кодировке, при этом обнуляя его содержимое. Если файл существовал, он обнуляется.Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file
    procedure Rewrite(f: двоичный файл; fileName: string; en: Encoding); +
            Связывает файловую переменную f с файлом fileName на диске и открывает двоичный файл на чтение и запись в заданной кодировке, при этом обнуляя его содержимое.Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file
    procedure Seek(f: двоичный файл; n: int64); +
            Устанавливает текущую позицию файлового указателя в двоичном файле на элемент с данным номером
    procedure Truncate(f: двоичный файл); +
            Усекает двоичный файл, отбрасывая все элементы с позиции файлового указателя.Двоичный файл - это либо типизированный файл file of T, либо бестиповой файл file
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for char.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for char.html index 0ff3eb8e8..bd22ef3a1 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for char.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for char.html @@ -16,42 +16,42 @@ -

    +

    Подпрограммы для работы с символами

    +
            Преобразует код в символ в кодировке Unicode +
            Преобразует код в символ в кодировке Windows. Устарело. Используйте ChrWindows +
            Преобразует код в символ в кодировке Unicode +
            Преобразует код в символ в кодировке Windows +
            Уменьшает код символа c на 1 +
            Уменьшает код символа c на n +
            Увеличивает код символа c на 1 +
            Увеличивает код символа c на n +
            Преобразует символ в нижний регистр +
            Преобразует символ в нижний регистр +
            Преобразует символ в код в кодировке Unicode +
            Преобразует символ в код в кодировке Windows. Устарело. Используйте OrdWindows +
            Преобразует символ в код в кодировке Unicode +
            Преобразует символ в код в кодировке Windows +
            Возвращает предшествующий x символ +
            Возвращает следующий за x символ +
            Преобразует символ в верхний регистр +
            Преобразует символ в верхний регистр
    function Chr(a: word): char; -
             Unicode
    function ChrAnsi(a: byte): char; -
             Windows. . ChrWindows
    function ChrUnicode(a: word): char; -
             Unicode
    function ChrWindows(a: byte): char; -
             Windows
    procedure Dec(var c: char); -
             c 1
    procedure Dec(var c: char; n: integer); -
             c n
    procedure Inc(var c: char); -
             c 1
    procedure Inc(var c: char; n: integer); -
             c n
    function LowCase(ch: char): char; -
            
    function LowerCase(ch: char): char; -
            
    function Ord(a: char): word; -
             Unicode
    function OrdAnsi(a: char): byte; -
             Windows. . OrdWindows
    function OrdUnicode(a: char): word; -
             Unicode
    function OrdWindows(a: char): byte; -
             Windows
    function Pred(x: char): char; -
             x
    function Succ(x: char): char; -
             x
    function UpCase(ch: char): char; -
            
    function UpperCase(ch: char): char; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for matrixes.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for matrixes.html index 8ce83d057..408497732 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for matrixes.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for matrixes.html @@ -11,42 +11,42 @@ -

    +

    Подпрограммы для создания двумерных массивов

    +
            Возвращает двумерный массив размера m x n, заполненный указанными значениями по строкам +
            Возвращает двумерный массив, заполненный значениями из одномерных массивов +
            Генерирует двумерный массив по массиву массивов столбцов +
            Генерирует двумерный массив по последовательности массивов столбцов +
            Генерирует двумерный массив по последовательности последовательностей столбцов +
            Генерирует двумерный массив по столбцам из последовательности +
            Генерирует двумерный массив по массиву массивов строк +
            Генерирует двумерный массив по последовательности массивов строк +
            Генерирует двумерный массив по последовательности последовательностей строк +
            Генерирует двумерный массив по строкам из последовательности +
            Возвращает двумерный массив размера m x n, заполненный элементами x +
            Возвращает двумерный массив размера m x n, заполненный элементами gen(i,j) +
            Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями +
            Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями +
            Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями +
            Возвращает двумерный массив размера m x n из целых, введенных с клавиатуры +
            Возвращает двумерный массив размера m x n из вещественных, введенных с клавиатуры +
            Транспонирует двумерный массив
    function Matr<T>(m,n: integer; params data: array of T): array [,] of T; -
             m x n,
    function Matr<T>(params aa: array of array of T): array [,] of T; -
             ,
    function MatrByCol<T>(a: array of array of T): array [,] of T; -
            
    function MatrByCol<T>(a: sequence of array of T): array [,] of T; -
            
    function MatrByCol<T>(a: sequence of sequence of T): array [,] of T; -
            
    function MatrByCol<T>(m,n: integer; a: sequence of T): array [,] of T; -
            
    function MatrByRow<T>(a: array of array of T): array [,] of T; -
            
    function MatrByRow<T>(a: sequence of array of T): array [,] of T; -
            
    function MatrByRow<T>(a: sequence of sequence of T): array [,] of T; -
            
    function MatrByRow<T>(m,n: integer; a: sequence of T): array [,] of T; -
            
    function MatrFill<T>(m, n: integer; x: T): array [,] of T; -
             m x n, x
    function MatrGen<T>(m, n: integer; gen: (integer,integer)->T): array [,] of T; -
             m x n, gen(i,j)
    function MatrRandom(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 100): array [,] of integer; -
             m x n,
    function MatrRandomInteger(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 100): array [,] of integer; -
             m x n,
    function MatrRandomReal(m: integer := 5; n: integer := 5; a: real := 0; b: real := 10; digits: integer := 2): array [,] of real; -
             m x n,
    function ReadMatrInteger(m, n: integer): array [,] of integer; -
             m x n ,
    function ReadMatrReal(m, n: integer): array [,] of real; -
             m x n ,
    function Transpose<T>(a: array [,] of T): array [,] of T; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for sequence generation.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for sequence generation.html index 8e5265fcf..26b3a55ac 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for sequence generation.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for sequence generation.html @@ -19,104 +19,104 @@ -

    +

    Подпрограммы для генерации последовательностей

    +
            Возвращает все комбинации элементов двух последовательностей, проектируя каждую пару на значение +
            Возвращает все комбинации элементов последовательностей, проектируя каждую тройку на значение +
            Возвращает все комбинации элементов последовательностей, проектируя каждую четвёрку на значение +
            Возвращает все комбинации элементов последовательностей, проектируя каждую пятёрку на значение +
            Возвращает все комбинации элементов последовательностей в виде последовательности пар +
            Возвращает все комбинации элементов последовательностей в виде последовательности троек +
            Возвращает все комбинации элементов последовательностей в виде последовательности четвёрок +
            Возвращает все комбинации элементов последовательностей в виде последовательности пятёрок +
            Возвращает бесконечную рекуррентную последовательность элементов, задаваемую начальным элементом first и функцией next +
            Возвращает n равномерно распределённых точек между a и b включительно (аналог numpy.linspace) +
            Возвращает последовательность вещественных в точках разбиения отрезка [a,b] на n равных частей +
            Возвращает последовательность целых от a до b +
            Возвращает последовательность целых от a до b с шагом step +
            Возвращает последовательность длинных целых от a до b +
            Возвращает последовательность длинных целых от a до b с шагом step +
            Возвращает последовательность символов от c1 до c2 +
            Возвращает последовательность символов от c1 до c2 с шагом step +
            Возвращает последовательность вещественных от a до b с шагом step +
            Возвращает последовательность из n целых, введенных с клавиатуры +
            Выводит приглашение к вводу и возвращает последовательность из n целых, введенных с клавиатуры +
            Возвращает последовательность целых, вводимых с клавиатуры пока выполняется определенное условие +
            Выводит приглашение к вводу и возвращает последовательность целых, вводимых с клавиатуры пока выполняется определенное условие +
            Возвращает последовательность из n вещественных, введенных с клавиатуры +
            Выводит приглашение к вводу и возвращает последовательность из n вещественных, введенных с клавиатуры +
            Возвращает последовательность вещественных, вводимых с клавиатуры пока выполняется определенное условие +
            Выводит приглашение к вводу и возвращает последовательность вещественных, вводимых с клавиатуры пока выполняется определенное условие +
            Возвращает последовательность из n строк, введенных с клавиатуры +
            Выводит приглашение к вводу и возвращает последовательность из n строк, введенных с клавиатуры +
            Возвращает последовательность строк, вводимых с клавиатуры пока выполняется определенное условие +
            Выводит приглашение к вводу и возвращает последовательность строк, вводимых с клавиатуры пока выполняется определенное условие +
            Возвращает последовательность из указанных элементов +
            Возвращает последовательность из count элементов x +
            Возвращает последовательность из count элементов, заполненных значениями f(i) +
            Возвращает последовательность из count элементов, заполненных значениями f(i), начиная с i=from +
            Возвращает последовательность из count элементов, начинающуюся с first, с функцией next перехода от предыдущего к следующему +
            Возвращает последовательность из count элементов, начинающуюся с first и second,с функцией next перехода от двух предыдущих к следующему +
            Возвращает последовательность из n случайных целых элементов +
            Возвращает последовательность из n случайных целых элементов +
            Возвращает последовательность из n случайных вещественных элементов +
            Возвращает последовательность элементов с начальным значением first,функцией next перехода от предыдущего к следующему и условием pred продолжения последовательности +
            Возвращает последовательность элементов, начинающуюся с first и second,с функцией next перехода от двух предыдущих к следующему и условием pred продолжения последовательности +
            Объединяет две последовательности в последовательность двухэлементных кортежей +
            Объединяет три последовательности в последовательность трехэлементных кортежей +
            Объединяет четыре последовательности в последовательность четырехэлементных кортежей +
            Объединяет пять последовательностей в последовательность пятиэлементных кортежей +
            Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов +
            Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов +
            Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов +
            Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
    function Cartesian<T, T1, TRes>(a: sequence of T; b: sequence of T1; func: (T,T1)->TRes): sequence of TRes; -
             ,
    function Cartesian<T, T1, T2, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2)->TRes): sequence of TRes; -
             ,
    function Cartesian<T, T1, T2, T3, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3)->TRes): sequence of TRes; -
             ,
    function Cartesian<T, T1, T2, T3, T4, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4)->TRes): sequence of TRes; -
             ,
    function Cartesian<T, T1>(a: sequence of T; b: sequence of T1): sequence of (T, T1); -
            
    function Cartesian<T, T1, T2>(a: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2); -
            
    function Cartesian<T, T1, T2, T3>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3); -
            
    function Cartesian<T, T1, T2, T3, T4>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4); -
            
    function Iterate<T>(first: T; next: T->T): sequence of T; -
             , first next
    function Linspace(a, b: real; n: integer): sequence of real; -
             n a b ( numpy.linspace)
    function PartitionPoints(a, b: real; n: integer): sequence of real; -
             [a,b] n
    function Range(a, b: integer): sequence of integer; -
             a b
    function Range(a, b, step: integer): sequence of integer; -
             a b step
    function Range(a, b: BigInteger): sequence of BigInteger; -
             a b
    function Range(a, b, step: BigInteger): sequence of BigInteger; -
             a b step
    function Range(c1, c2: char): sequence of char; -
             c1 c2
    function Range(c1, c2: char; step: integer): sequence of char; -
             c1 c2 step
    function Range(a, b, step: real): sequence of real; -
             a b step
    function ReadSeqInteger(n: integer): sequence of integer; -
             n ,
    function ReadSeqInteger(prompt: string; n: integer): sequence of integer; -
             n ,
    function ReadSeqIntegerWhile(cond: integer->boolean): sequence of integer; -
             ,
    function ReadSeqIntegerWhile(prompt: string; cond: integer->boolean): sequence of integer; -
             ,
    function ReadSeqReal(n: integer): sequence of real; -
             n ,
    function ReadSeqReal(prompt: string; n: integer): sequence of real; -
             n ,
    function ReadSeqRealWhile(cond: real->boolean): sequence of real; -
             ,
    function ReadSeqRealWhile(prompt: string; cond: real->boolean): sequence of real; -
             ,
    function ReadSeqString(n: integer): sequence of string; -
             n ,
    function ReadSeqString(prompt: string; n: integer): sequence of string; -
             n ,
    function ReadSeqStringWhile(cond: string->boolean): sequence of string; -
             ,
    function ReadSeqStringWhile(prompt: string; cond: string->boolean): sequence of string; -
             ,
    function Seq<T>(params a: array of T): sequence of T; -
            
    function SeqFill<T>(count: integer; x: T): sequence of T; -
             count x
    function SeqGen<T>(count: integer; f: integer->T): sequence of T; -
             count , f(i)
    function SeqGen<T>(count: integer; f: integer->T; from: integer): sequence of T; -
             count , f(i), i=from
    function SeqGen<T>(count: integer; first: T; next: T->T): sequence of T; -
             count , first, next
    function SeqGen<T>(count: integer; first, second: T; next: (T,T) ->T): sequence of T; -
             count , first second, next
    function SeqRandom(n: integer := 10; a: integer := 0; b: integer := 100): sequence of integer; -
             n
    function SeqRandomInteger(n: integer := 10; a: integer := 0; b: integer := 100): sequence of integer; -
             n
    function SeqRandomReal(n: integer := 10; a: real := 0; b: real := 10; digits: integer := 1): sequence of real; -
             n
    function SeqWhile<T>(first: T; next: T->T; pred: T->boolean): sequence of T; -
             first, next pred
    function SeqWhile<T>(first, second: T; next: (T,T) ->T; pred: T->boolean): sequence of T; -
             , first second, next pred
    function Zip<T, T1>(a: sequence of T; b: sequence of T1): sequence of (T, T1); -
            
    function Zip<T, T1, T2>(a: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2); -
            
    function Zip<T, T1, T2, T3>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3); -
            
    function Zip<T, T1, T2, T3, T4>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4); -
            
    function Zip<T, T1, TRes>(a: sequence of T; b: sequence of T1; fun: (T,T1) -> TRes): sequence of TRes; -
             ,
    function Zip<T, T1, T2, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; fun: (T,T1,T2) -> TRes): sequence of TRes; -
             ,
    function Zip<T, T1, T2, T3, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; fun: (T,T1,T2,T3) -> TRes): sequence of TRes; -
             ,
    function Zip<T, T1, T2, T3, T4, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; fun: (T,T1,T2,T3,T4) -> TRes): sequence of TRes; -
             ,
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for set of T.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for set of T.html index 3fa938a89..23b9f9dc4 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for set of T.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for set of T.html @@ -2,14 +2,14 @@ -

    +

    Подпрограммы для работы со стандартными множествами

    +
            Удаляет элемент element из множества s +
            Удаляет элемент element из множества s +
            Добавляет элемент element во множество s +
            Добавляет элемент element во множество s
    procedure Exclude(var s: set of T; element: T); -
             element s
    procedure Exclude(var s: set of T; element: T); -
             element s
    procedure Include(var s: set of T; element: T); -
             element s
    procedure Include(var s: set of T; element: T); -
             element s
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for string.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for string.html index dcd59aa6c..8a8d28a36 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for string.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for string.html @@ -39,108 +39,108 @@ -

    +

    Подпрограммы для работы со строками

    +
            Сравнивает строки. Возвращает значение < 0 если s1<s2, > 0 если s1>s2 и = 0 если s1=s2 +
            Возвращает строку, являющуюся результатом слияния строк s1,s2,... +
            Возвращает строку, являющуюся результатом слияния строк s1 и s2 +
            Возвращает подстроку строки s длины count с позиции index +
            Удаляет из строки s count символов с позиции index +
            Преобразует вещественное число к строковому представлению +
            Преобразует вещественное число к строковому представлению +
            Возвращает отформатированную строку, построенную по форматной строке и списку форматируемых параметров +
            Вставляет подстроку subs в строку s с позиции index +
            Преобразует целое число к строковому представлению +
            Преобразует целое число к строковому представлению +
            Возвращает позицию последнего вхождения подстроки subs в строке s. Если не найдена, возвращает 0 +
            Возвращает позицию последнего вхождения подстроки subs в строке s начиная с позиции from. Если не найдена, возвращает 0 +
            Возвращает первые count символов строки s +
            Возвращает длину строки +
            Возвращает строку в нижнем регистре +
            Возвращает позицию подстроки subs в строке s. Если не найдена, возвращает 0 +
            Возвращает позицию подстроки subs в строке s начиная с позиции from. Если не найдена, возвращает 0 +
            Считывает целое из строки начиная с позиции from и устанавливает from за считанным значением +
            Считывает вещественное из строки начиная с позиции from и устанавливает from за считанным значением +
            Считывает из строки последовательность символов до пробельного символа начиная с позиции from и устанавливает from за считанным значением +
            Возвращает инвертированную строку +
            Возвращает инвертированную строку в диапазоне длины length начиная с индекса index +
            Возвращает последние count символов строки s - +
            Устанавливает длину строки s равной n + +
            Преобразует вещественное значение r к строковому представлению и записывает результат в s +
            Преобразует вещественное значение r к строковому представлению и записывает результат в s +
            Возвращает True если достигнут конец строки или в строке остались только пробельные символы и False в противном случае +
            Возвращает строку, состоящую из count символов ch +
            Преобразует строковое представление вещественного числа к числовому значению +
            Преобразует строковое представление вещественного числа к числовому значению +
            Преобразует строковое представление вещественного числа к числовому значению +
            Преобразует строковое представление целого числа к числовому значению +
            Преобразует строковое представление целого числа к числовому значению +
            Преобразует строковое представление вещественного числа к числовому значению +
            Преобразует строковое представление вещественного числа к числовому значению +
            Преобразует строковое представление вещественного числа к числовому значению +
            Возвращает строку с удаленными начальными и конечными пробелами +
            Возвращает строку с удаленными начальными пробелами +
            Возвращает строку с удаленными конечными пробелами +
            Считывает целое из строки начиная с позиции from и устанавливает from за считанным значением.Возвращает True если считывание удачно и False в противном случае +
            Считывает вещественное из строки начиная с позиции from и устанавливает from за считанным значением.Возвращает True если считывание удачно и False в противном случае +
            Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value.При невозможности преобразования возвращается False +
            Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value.При невозможности преобразования возвращается False +
            Преобразует строковое представление s целого числа к числовому значению и записывает его в value.При невозможности преобразования возвращается False +
            Преобразует строковое представление s целого числа к числовому значению и записывает его в value.При невозможности преобразования возвращается False +
            Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value.При невозможности преобразования возвращается False +
            Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value.При невозможности преобразования возвращается False - +
            Возвращает строку в верхнем регистре +
    function CompareStr(s1, s2: string): integer; -
             . < 0 s1<s2, > 0 s1>s2 = 0 s1=s2
    function Concat(s1,s2,...): string; -
             , s1,s2,...
    function Concat(s1, s2: string): string; -
             , s1 s2
    function Copy(s: string; index, count: integer): string; -
             s count index
    procedure Delete(var s: string; index, count: integer); -
             s count index
    function FloatToStr(a: real): string; -
            
    function FloatToStr(a: real; nfi: NumberFormatInfo): string; -
            
    function Format(formatstring: string; params pars: array of object): string; -
             ,
    procedure Insert(subs: string; var s: string; index: integer); -
             subs s index
    function IntToStr(a: integer): string; -
            
    function IntToStr(a: int64): string; -
            
    function LastPos(subs, s: string): integer; -
             subs s. , 0
    function LastPos(subs, s: string; from: integer): integer; -
             subs s from. , 0
    function LeftStr(s: string; count: integer): string; -
             count s
    function Length(s: string): integer; -
            
    function LowerCase(s: string): string; -
            
    function Pos(subs, s: string; from: integer := 1): integer; -
             subs s. , 0
    function PosEx(subs, s: string; from: integer := 1): integer; -
             subs s from. , 0
    function ReadIntegerFromString(s: string; var from: integer): integer; -
             from from
    function ReadRealFromString(s: string; var from: integer): real; -
             from from
    function ReadWordFromString(s: string; var from: integer): string; -
             from from
    function ReverseString(s: string): string; -
            
    function ReverseString(s: string; index,length: integer): string; -
             length index
    function RightStr(s: string; count: integer): string; -
             count s
    procedure SetLength(var s: string; n: integer); -
             s n
    procedure Str(i: ; var s: string); -
             i s
    procedure Str(i: целое; var s: string); +
            Преобразует целое значение i к строковому представлению и записывает результат в s
    procedure Str(r: real; var s: string); -
             r s
    procedure Str(r: single; var s: string); -
             r s
    function StringIsEmpty(s: string; var from: integer): boolean; -
             True False
    function StringOfChar(ch: char; count: integer): string; -
             , count ch
    function StrToFloat(s: string): real; -
            
    function StrToFloat(s: string; nfi: NumberFormatInfo): real; -
            
    function StrToFloat(s: string; DecimalSeparator: string): real; -
            
    function StrToInt(s: string): integer; -
            
    function StrToInt64(s: string): int64; -
            
    function StrToReal(s: string): real; -
            
    function StrToReal(s: string; nfi: NumberFormatInfo): real; -
            
    function StrToReal(s: string; DecimalSeparator: string): real; -
            
    function Trim(s: string): string; -
            
    function TrimLeft(s: string): string; -
            
    function TrimRight(s: string): string; -
            
    function TryReadIntegerFromString(s: string; var from: integer; var res: integer): boolean; -
             from from . True False
    function TryReadRealFromString(s: string; var from: integer; var res: real): boolean; -
             from from . True False
    function TryStrToFloat(s: string; var value: real): boolean; -
             s value. False
    function TryStrToFloat(s: string; var value: single): boolean; -
             s value. False
    function TryStrToInt(s: string; var value: integer): boolean; -
             s value. False
    function TryStrToInt64(s: string; var value: int64): boolean; -
             s value. False
    function TryStrToReal(s: string; var value: real): boolean; -
             s value. False
    function TryStrToSingle(s: string; var value: single): boolean; -
             s value. False
    function UpperCase(s: string): string; -
            
    procedure Val(s: string; var value: ; var err: integer); -
             s value. , err=0, err>0
    procedure Val(s: string; var value: число; var err: integer); +
            Преобразует строковое представление s целого или вещественного числа к числовому значению и записывает его в переменную value.Если преобразование успешно, то err=0, иначе err>0
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for text files.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for text files.html index 452cbacea..7647287a8 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for text files.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for text files.html @@ -16,74 +16,74 @@ -

    +

    Подпрограммы для работы с текстовыми файлами

    +
            Открывает текстовый файл на дополнение в кодировке Windows +
            Открывает текстовый файл на дополнение в указанной кодировке +
            Связывает файловую переменную f с именем файла fileName и открывает текстовый файл на дополнение в кодировке Windows +
            Связывает файловую переменную f с именем файла fileName и открывает текстовый файл на дополнение в указанной кодировке +
            Возвращает True, если в файле достигнут конец строки +
            Записывает содержимое буфера файла на диск +
            Возвращает текстовый файл с именем fileName, открытый на дополнение в кодировке Windows +
            Возвращает текстовый файл с именем fileName, открытый на дополнение в указанной кодировке +
            Возвращает текстовый файл с именем fileName, открытый на чтение в кодировке Windows +
            Возвращает текстовый файл с именем fileName, открытый на чтение в указанной кодировке +
            Возвращает текстовый файл с именем fileName, открытый на запись в кодировке Windows +
            Возвращает текстовый файл с именем fileName, открытый на запись в указанной кодировке +
            Открывает файл, считывает из него строки в кодировке Windows в виде массива строк, после чего закрывает файл +
            Открывает файл, считывает из него строки в указаной кодировке в виде массива строк, после чего закрывает файл +
            Открывает файл, считывает его содержимое в кодировке Windows в виде строки, после чего закрывает файл +
            Открывает файл, считывает его содержимое в указаной кодировке в виде строки, после чего закрывает файл +
            Открывает файл, считывает из него строки в кодировке Windows и закрывает файл. В каждый момент в памяти хранится только текущая строка +
            Открывает файл, считывает из него строки в указаной кодировке и закрывает файл. В каждый момент в памяти хранится только текущая строка +
            Открывает текстовый файл на чтение в кодировке Windows +
            Открывает текстовый файл на чтение в указанной кодировке +
            Связывает файловую переменную f с именем файла fileName и открывает текстовый файл на чтение в кодировке Windows +
            Связывает файловую переменную f с именем файла fileName и открывает текстовый файл на чтение в указанной кодировке +
            Открывает текстовый файл на запись в кодировке Windows.Если файл существовал - он обнуляется, если нет - создается пустой +
            Открывает текстовый файл на запись в указанной кодировке.Если файл существовал - он обнуляется, если нет - создается пустой +
            Связывает файловую переменную с именем файла fileName и открывает текстовый файл f на запись в кодировке Windows.Если файл существовал - он обнуляется, если нет - создается пустой +
            Связывает файловую переменную f с именем файла fileName и открывает текстовый файл f на запись в указанной кодировке.Если файл существовал - он обнуляется, если нет - создается пустой +
            Пропускает пробельные символы, после чего возвращает True, если достигнут конец файла +
            Пропускает пробельные символы, после чего возвращает True, если в файле достигнут конец строки +
            Создает новый файл, записывает в него строки из массива в кодировке Windows, после чего закрывает файл +
            Создает новый файл, записывает в него строки из массива в указанной кодировке, после чего закрывает файл +
            Создает новый файл, записывает в него строку в кодировке Windows, после чего закрывает файл +
            Создает новый файл, записывает в него строку в указанной кодировке, после чего закрывает файл +
            Создает новый файл, записывает в него строки из последовательности в кодировке Windows, после чего закрывает файл +
            Создает новый файл, записывает в него строки из последовательности в указанной кодировке, после чего закрывает файл
    procedure Append(f: Text); -
             Windows
    procedure Append(f: Text; en: Encoding); -
            
    procedure Append(f: Text; fileName: string); -
             f fileName Windows
    procedure Append(f: Text; fileName: string; en: Encoding); -
             f fileName
    function Eoln(f: Text): boolean; -
             True,
    procedure Flush(f: Text); -
            
    function OpenAppend(fileName: string): Text; -
             fileName, Windows
    function OpenAppend(fileName: string; en: Encoding): Text; -
             fileName,
    function OpenRead(fileName: string): Text; -
             fileName, Windows
    function OpenRead(fileName: string; en: Encoding): Text; -
             fileName,
    function OpenWrite(fileName: string): Text; -
             fileName, Windows
    function OpenWrite(fileName: string; en: Encoding): Text; -
             fileName,
    function ReadAllLines(path: string): array of string; -
             , Windows ,
    function ReadAllLines(path: string; en: Encoding): array of string; -
             , ,
    function ReadAllText(path: string): string; -
             , Windows ,
    function ReadAllText(path: string; en: Encoding): string; -
             , ,
    function ReadLines(path: string): sequence of string; -
             , Windows .
    function ReadLines(path: string; en: Encoding): sequence of string; -
             , .
    procedure Reset(f: Text); -
             Windows
    procedure Reset(f: Text; en: Encoding); -
            
    procedure Reset(f: Text; fileName: string); -
             f fileName Windows
    procedure Reset(f: Text; fileName: string; en: Encoding); -
             f fileName
    procedure Rewrite(f: Text); -
             Windows. - , -
    procedure Rewrite(f: Text; en: Encoding); -
             . - , -
    procedure Rewrite(f: Text; fileName: string); -
             fileName f Windows. - , -
    procedure Rewrite(f: Text; fileName: string; en: Encoding); -
             f fileName f . - , -
    function SeekEof(f: Text): boolean; -
             , True,
    function SeekEoln(f: Text): boolean; -
             , True,
    procedure WriteAllLines(path: string; ss: array of string); -
             , Windows,
    procedure WriteAllLines(path: string; ss: array of string; en: Encoding); -
             , ,
    procedure WriteAllText(path: string; s: string); -
             , Windows,
    procedure WriteAllText(path: string; s: string; en: Encoding); -
             , ,
    procedure WriteLines(path: string; ss: sequence of string); -
             , Windows,
    procedure WriteLines(path: string; ss: sequence of string; en: Encoding); -
             , ,
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/System subroutines.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/System subroutines.html index a44d8625f..370992ef2 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/System subroutines.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/System subroutines.html @@ -38,94 +38,94 @@ -

    C

    +

    Cистемные подпрограммы

    +
            Выводит в специальном окне стек вызовов подпрограмм если условие не выполняется +
            Выводит в специальном окне диагностическое сообщение и стек вызовов подпрограмм если условие не выполняется +
            Изменяет расширение файла с именем fileName на newExt +
            Меняет текущий каталог +
            Создает каталог. Возвращает True, если каталог успешно создан +
            Удаляет файл. Если файл не может быть удален, то возвращает False +
            Возвращает свободное место в байтах на диске с именем diskname +
            Возвращает свободное место в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д. +
            Возвращает размер в байтах на диске с именем diskname +
            Возвращает размер в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д. +
            Освобождает динамическую память, на которую указывает p +
            Возвращает последовательность имен каталогов по заданному пути, включая подкаталоги +
            Возвращает последовательность имен файлов по заданному пути, соответствующих шаблону поиска, включая подкаталоги +
            Возвращает последовательность имен каталогов по заданному пути +
            Возвращает последовательность имен файлов по заданному пути, соответствующих шаблону поиска +
            Запускает программу или документ с именем fileName +
            Запускает программу или документ с именем fileName и параметрами командной строки args +
            Запускает программу или документ с именем fileName +
            Запускает программу или документ с именем fileName и параметрами командной строки args +
            Возвращает True, если файл с именем fileName существует +
            Возвращает текущий каталог +
            Возвращает текущий каталог +
            Возващает имя запущенного .exe-файла +
            Завершает работу программы, возвращая код ошибки exitCode +
            Завершает работу программы +
            Возвращает количество миллисекунд с момента начала работы программы +
            Возвращает количество миллисекунд с момента последнего вызова Milliseconds или MillisecondsDelta или начала программы +
            Создает каталог +
            Выделяет динамическую память размера sizeof(T) и возвращает в переменной p указатель на нее. Тип T должен быть размерным +
            Создаёт настройки форматирования числовых значений +
            Возвращает количество параметров командной строки +
            Возвращает i-тый параметр командной строки +
            Возвращает версию PascalABC.NET +
            Преобразует указатель к строковому представлению +
            Удаляет каталог. Возвращает True, если каталог успешно удален +
            Переименовывает каталог dirName, давая ему новое имя newDirName. Возвращает True, если каталог успешно переименован +
            Переименовывает файл fileName, давая ему новое имя newfileName. Возвращает True, если файл успешно переименован +
            Удаляет каталог +
            Устанавливает текущий каталог. Возвращает True, если каталог успешно установлен +
            Устанавливает разделитель между целой и дробной частью в вещественных значениях +
            Устанавливает параметры числового формата +
            Делает паузу на ms миллисекунд +
            Возвращает строку с именем типа объекта +
            Возвращает строку с именем данного типа
    procedure Assert(cond: boolean); -
            
    procedure Assert(cond: boolean; message: string); -
            
    function ChangeFileNameExtension(fileName, newExt: string): string; -
             fileName newExt
    procedure ChDir(dirName: string); -
            
    function CreateDir(dirName: string): boolean; -
             . True,
    function DeleteFile(fileName: string): boolean; -
             . , False
    function DiskFree(diskName: string): int64; -
             diskname
    function DiskFree(disk: integer): int64; -
             disk. disk=0 - , disk=1 - A: , disk=2 - B: ..
    function DiskSize(diskName: string): int64; -
             diskname
    function DiskSize(disk: integer): int64; -
             disk. disk=0 - , disk=1 - A: , disk=2 - B: ..
    procedure Dispose<T>(var p: ^T); -
             , p
    function EnumerateAllDirectories(path: string): sequence of string; -
             ,
    function EnumerateAllFiles(path: string; searchPattern: string := '*.*'): sequence of string; -
             , ,
    function EnumerateDirectories(path: string): sequence of string; -
            
    function EnumerateFiles(path: string; searchPattern: string := '*.*'): sequence of string; -
             ,
    procedure Exec(fileName: string); -
             fileName
    procedure Exec(fileName: string; args: string); -
             fileName args
    procedure Execute(fileName: string); -
             fileName
    procedure Execute(fileName: string; args: string); -
             fileName args
    function FileExists(fileName: string): boolean; -
             True, fileName
    function GetCurrentDir: string; -
            
    function GetDir: string; -
            
    function GetEXEFileName: string; -
             .exe-
    procedure Halt(exitCode: integer); -
             , exitCode
    procedure Halt; -
            
    function Milliseconds: integer; -
            
    function MillisecondsDelta: integer; -
             Milliseconds MillisecondsDelta
    procedure MkDir(dirName: string); -
            
    procedure New<T>(var p: ^T); -
             sizeof(T) p . T
    function NumberFormat(DecimalSeparator: string := '.'; GroupSeparator: string := ','); -
            
    function ParamCount: integer; -
            
    function ParamStr(i: integer): string; -
             i-
    function PascalABCVersion: string; -
             PascalABC.NET
    function PointerToString(p: pointer): string; -
            
    function RemoveDir(dirName: string): boolean; -
             . True,
    function RenameDirectory(dirName, newDirName: string): boolean; -
             dirName, newDirName. True,
    function RenameFile(fileName, newfileName: string): boolean; -
             fileName, newfileName. True,
    procedure RmDir(dirName: string); -
            
    function SetCurrentDir(dirName: string): boolean; -
             . True,
    procedure SetDecimalSeparator(sep: string); -
            
    procedure SetNumberFormat(DecimalSeparator: string := '.'; GroupSeparator: string := ','); -
            
    procedure Sleep(ms: integer); -
             ms
    function TypeName(obj: object): string; -
            
    function TypeToTypeName(t: System.Type): string; -
            
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Write subroutines.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Write subroutines.html index eb568952e..498e085fb 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Write subroutines.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Write subroutines.html @@ -8,34 +8,34 @@ -

    +

    Подпрограммы вывода

    +
            Десериализует объект из файла +
            Выводит значения a,b,... на экран, после каждого значения выводит пробел +
            Выводит значения a,b,... в текстовый файл f, после каждого значения выводит пробел +
            Выводит значения a,b,... на экран, после каждого значения выводит пробел и переходит на новую строку +
            Выводит значения a,b,... в текстовый файл f, после каждого значения выводит пробел и переходит на новую строку +
            Сериализует объект в файл (объект должен иметь атрибут [Serializable]) - +
            Выводит значения a,b,... на экран + +
            Выводит значения args согласно форматной строке formatstr +
            Выводит значения args в текстовый файл f согласно форматной строке formatstr +
            Выводит значения a,b,... на экран и осуществляет переход на новую строку +
            Выводит значения a,b,... в текстовый файл f и осуществляет переход на новую строку +
            Выводит значения args согласно форматной строке formatstr и осуществляет переход на новую строку +
            Выводит значения args в текстовый файл f согласно форматной строке formatstrи осуществляет переход на новую строку
    function Deserialize(fileName: string): object; -
            
    procedure Print(a,b,...); -
             a,b,... ,
    procedure Print(f: Text; a,b,...); -
             a,b,... f,
    procedure Println(a,b,...); -
             a,b,... ,
    procedure Println(f: Text; a,b,...); -
             a,b,... f,
    procedure Serialize(fileName: string; obj: object); -
             ( [Serializable])
    procedure Write(a,b,...); -
             a,b,...
    procedure Write(f: ; a,b,...); -
             a,b,... f
    procedure Write(f: файл; a,b,...); +
            Выводит значения a,b,... в файл f
    procedure WriteFormat(formatstr: string; params args: array of object); -
             args formatstr
    procedure WriteFormat(f: Text; formatstr: string; params args: array of object); -
             args f formatstr
    procedure Writeln(a,b,...); -
             a,b,...
    procedure Writeln(f: Text; a,b,...); -
             a,b,... f
    procedure WritelnFormat(formatstr: string; params args: array of object); -
             args formatstr
    procedure WritelnFormat(f: Text; formatstr: string; params args: array of object); -
             args f formatstr
    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Вспомогательные функции для pattern matching.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Вспомогательные функции для pattern matching.html index dfa4c8440..1ff963c9f 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Вспомогательные функции для pattern matching.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Вспомогательные функции для pattern matching.html @@ -1,5 +1,5 @@ -

    pattern matching

    +

    Вспомогательные функции для pattern matching

    \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Метод расширения Print для элементарных типов.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Метод расширения Print для элементарных типов.html index 835f8c4b1..fb3a7ee5f 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Метод расширения Print для элементарных типов.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Метод расширения Print для элементарных типов.html @@ -2,7 +2,7 @@ -

    Print

    +

    Метод расширения Print для элементарных типов

    function Print(Self: real): real; extensionmethod;
            ction Print(Self: integer): integer; extensionmethod;
    function Print(Self: boolean): boolean; extensionmethod; diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/_main_old.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/_main_old.html index 0a56933b2..f9ae0209a 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/_main_old.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/_main_old.html @@ -11,33 +11,33 @@ -

    PABCSystem

    -

    PABCSystem - . -, , , .

    +

    Обзор системного модуля PABCSystem

    +

    Модуль PABCSystem называется системным +и автоматически подключается первым к любой программе или модулю. Он содержит ряд +процедур, функций, констант, типов.

      -
    • PABCSystem +
    • Константы модуля PABCSystem
    • -
    • PABCSystem diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_common.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_common.html index dac00904f..24655ca3a 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_common.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_common.html @@ -20,27 +20,27 @@ -

      +

      Общие подпрограммы

      +         Меняет местами значения двух переменных +        Возвращает количество миллисекунд с момента начала работы программы @@ -48,61 +48,61 @@ +         Возвращает запись Tuple с соответствующим количеством полей. + Поля именуются соответственно Item1, Item2 и т.д. и получают значения + x1,x2,... Количество полей - от 2 до 6. +         Возвращает словарь пар элементов +         Возвращает пару элементов для использования в функции Dict @@ -110,15 +110,15 @@ procedure Exec(filename: string; args: string);
      -         filename - args +        Запускает программу или документ с именем filename и параметрами +командной строки args @@ -127,15 +127,15 @@ procedure Execute(filename: string; args: string);
      -         filename - args +        Запускает программу или документ с именем filename и параметрами +командной строки args @@ -143,20 +143,20 @@ string); function ParamStr(i: integer): string;
      -         i- +        Возвращает i-тый параметр командной строки +        Выделяет динамическую память размера sizeof(T) и возвращает в переменной p указатель на нее. +Тип T должен быть размерным @@ -164,7 +164,7 @@ p function GetEXEFileName: string;
      -         .exe- +        Возващает имя запущенного .exe-файла @@ -172,7 +172,7 @@ p function PointerToString(p: pointer): string;
      -         +        Преобразует указатель к строковому представлению
      procedure Swap<T>(var a, b: T);
      -         
      function Milliseconds: integer;
      -        
      function MillisecondsDelta: integer;
      -         - +        Возвращает количество миллисекунд с момента начала работы программы + или предыдущего вызова функций - Milliseconds + Milliseconds или MillisecondsDelta.
      function Rec<T1,T2,...>(x1: T1; x2: T2, ...): Tuple<T1,T2,...>;
      -          Tuple . - Item1, Item2 .. - x1,x2,... - 2 6.
      function Dict<TKey, TVal>(params pairs: array of KeyValuePair<TKey, TVal>): Dictionary<TKey, TVal>;
      -         
      function KV<TKey, TVal>(key: TKey; value: TVal): KeyValuePair<TKey, TVal>;
      -          Dict
      procedure Assert(cond: boolean);
      -         +        Выводит в специальном окне стек вызовов подпрограмм если условие не выполняется
      procedure Assert(cond: boolean; mes: string);
      -         mes +        Выводит в специальном окне диагностическое сообщение mes и стек вызовов подпрограмм если условие не выполняется
      procedure Sleep(ms: integer);
      -         ms +        Делает паузу на ms миллисекунд
      procedure Halt;
      -         +        Завершает работу программы
      procedure Halt(exitCode: integer);
      -         , exitCode +        Завершает работу программы, возвращая код ошибки exitCode
      procedure Exec(filename: string);
      -         filename +        Запускает программу или документ с именем filename
      procedure Execute(filename: string);
      -         filename +        Запускает программу или документ с именем filename
      function ParamCount: integer;
      -         +        Возвращает количество параметров командной строки
      procedure New<T>(var p: ^T);
      -         sizeof(T) p . - T
      procedure Dispose<T>(var p: ^T);
      -         , +        Освобождает динамическую память, на которую указывает p
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_const.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_const.html index 84fe8e4ed..6064b4cd5 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_const.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_const.html @@ -22,125 +22,125 @@ -

      -

      +

      Стандартные константы и переменные

      +

      Константы

      MaxShortInt = shortint.MaxValue;
      -         shortint +        Максимальное значение типа shortint
      MaxByte = byte.MaxValue;
      -         byte +        Максимальное значение типа byte
      MaxSmallInt = smallint.MaxValue;
      -         smallint +        Максимальное значение типа smallint
      MaxWord = word.MaxValue;
      -         word +        Максимальное значение типа word
      MaxInt = integer.MaxValue;
      -         integer +        Максимальное значение типа integer
      MaxLongWord = longword.MaxValue;
      -         longword +        Максимальное значение типа longword
      MaxInt64 = int64.MaxValue;
      -         int64 +        Максимальное значение типа int64
      MaxUInt64 = uint64.MaxValue;
      -         uint64 +        Максимальное значение типа uint64
      MaxDouble = real.MaxValue;
      -         double +        Максимальное значение типа double
      MinDouble = real.Epsilon;
      -         double +        Минимальное положительное значение типа double
      MaxReal = real.MaxValue;
      -         real +        Максимальное значение типа real
      MinReal = real.Epsilon;
      -         real +        Минимальное положительное значение типа real
      MaxSingle = single.MaxValue;
      -         single +        Максимальное значение типа single
      MinSingle = single.Epsilon;
      -         single +        Минимальное положительное значение типа single
      Pi = 3.141592653589793;
      -         Pi +        Константа Pi
      E = 2.718281828459045;
      -         E +        Константа E
      NewLine: string;
      -          +         Константа перехода на новую строку
      -

      +

      Переменные

      output
      -          . - , Assign +         Стандартный текстовый файл вывода. По умолчанию связан с + экраном, но может быть переназначен процедурой Assign
      input
      -          . , - Assign +         Стандартный текстовый файл ввода. По умолчанию связан с клавиатурой, + но может быть переназначен процедурой Assign
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_dynarray.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_dynarray.html index e3d946a9f..5408fdec4 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_dynarray.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_dynarray.html @@ -21,38 +21,38 @@ -

      +

      Подпрограммы для работы с динамическими массивами

      +        Возвращает длину динамического массива +        Возвращает длину +m-той размерности динамического массива (размерности нумеруются +с нуля) +        Устанавливает длину одномерного динамического массива. +Старое содержимое сохраняется. Ссылка a +на массив может измениться. +        Устанавливает +размер n-мерного динамического массива. Старое содержимое +сохраняется. Ссылка a на массив может +измениться. +        Возвращает копию динамического массива +         Возвращает нижнюю границу размерности массива (для динамических - 0) +         Возвращает массив, заполненный указанными элементами +         Возвращает массив из count элементов, начинающихся с first, с + функцией next перехода от предыдущего к следующему +         Возвращает массив из count элементов, начинающихся с first и second, + с функцией next перехода от двух предыдущих к следующему +         Возвращает массив из count элементов, заполненных значениями f(i) +         Возвращает массив из count элементов x +         Возвращает массив размера n, заполненный случайными целыми + значениями +         Возвращает массив размера n, заполненный случайными целыми + значениями +         Возвращает массив размера n, заполненный случайными вещественными + значениями +         Возвращает матрицу размера m x n, заполненную случайными целыми + значениями +         Возвращает матрицу размера m x n, заполненную случайными + вещественными значениями +         Возвращает массив из n целых, введенных с клавиатуры +         Выводит приглашение к вводу и возвращает массив из n целых, + введенных с клавиатуры +         Возвращает массив из n вещественных, введенных с клавиатуры +         Выводит приглашение к вводу и возвращает массив из n вещественных, + введенных с клавиатуры +         Возвращает массив из n строк, введенных с клавиатуры +         Выводит приглашение к вводу и возвращает массив из n строк, + введенных с клавиатуры
      function Length(a: System.Array): integer;
      -        
      function Length(a: System.Array; m: integer): integer;
      -         -m- ( - )
      procedure SetLength(var a: System.Array; n: integer);
      -         . - . a - .
      procedure SetLength(var a: System.Array; n1,n2,...: integer);
      -         - n- . -. a -.
      @@ -60,135 +60,135 @@ System.Array; n1,n2,...: integer);
      function Copy(a: System.Array): System.Array;
      -        
      function Low(a: System.Array): integer;
      -          ( - 0)
      function High(a: System.Array): integer;
      -          ( - +         Возвращает верхнюю границу размерности массива (для динамических - 0)
      procedure Sort<T>(a: array of T);
      -          +         Сортирует динамический массив по возрастанию
      procedure Reverse<T>(a: array of T);
      -          +         Изменяет порядок элементов в динамическом массиве на противоположный
      procedure Reverse<T>(a: array of T; index,length: integer);
      -          - length index +         Изменяет порядок элементов на противоположный в диапазоне + динамического массива длины length начиная с индекса index
      function Arr<T>(params a: array of T): array of T;
      -          ,
      function ArrGen<T>(count: integer; first: T; next: T->T): array of T;
      -          count , first, - next
      function ArrGen<T>(count: integer; first,second: T; next: (T,T)->T): array of T;
      -          count , first second, - next
      function ArrGen<T>(count: integer; f: integer->T): array of T;
      -          count , f(i)
      function ArrFill<T>(count: integer; x: T): array of T;
      -          count x
      function ArrRandom(n: integer := 10; a: integer := 0; b: integer := 100): array of integer;
      -          n, -
      function ArrRandomInteger(n: integer := 10; a: integer := 0; b: integer := 100): array of integer;
      -          n, -
      function ArrRandomReal(n: integer := 10; a: real := 0; b: real := 10): array of real;
      -          n, -
      function MatrixRandom(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 100): array [,] of integer;
      -          m x n, -
      function MatrixRandomReal(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 10): array [,] of real;
      -          m x n, -
      function ReadArrInteger(n: integer): array of integer;
      -          n ,
      function ReadArrInteger(const prompt: string; n: integer): array of integer;
      -          n , -
      function ReadArrReal(n: integer): array of real;
      -          n ,
      function ReadArrReal(const prompt: string; n: integer): array of real;
      -          n , -
      function ReadArrString(n: integer): array of string;
      -          n ,
      function ReadArrString(const prompt: string; n: integer): array of string;
      -          n , -
      \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_enum.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_enum.html index 94e948698..5ff5663a2 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_enum.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_enum.html @@ -9,42 +9,42 @@ -

      +

      Подпрограммы для работы с перечислимыми типами

      @@ -52,7 +52,7 @@ procedure Inc(var c: char; n: integer);
      -         c +        Увеличивает код символа c на n @@ -61,7 +61,7 @@ procedure Dec(var c: char);
      -         c 1 +        Уменьшает код символа c на 1 @@ -69,7 +69,7 @@ procedure Dec(var c: char; n: integer);
      -         c +        Уменьшает код символа c на n @@ -78,91 +78,91 @@ procedure Inc(vare: System.Enum);
      -         - e 1 +        Увеличивает значение +перечислимого типа e на 1 +         Преобразует символ в код @@ -306,7 +306,7 @@ function Ord(a: boolean): integer;
      -         +        Возвращает порядковый номер значения a @@ -314,7 +314,7 @@ function Ord(e: System.Enum): integer;
      -         +        Возвращает порядковый номер значения e diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_file.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_file.html index 1729f2b63..045a5b729 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_file.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_file.html @@ -24,62 +24,62 @@ -

      +

      Подпрограммы для работы с файлами через файловые переменные

      procedure Inc(var i: integer);
      -         -i 1 +        Увеличивает значение переменной +i на 1
      procedure Inc(var i: integer; n: integer);
      -         -i n +        Увеличивает значение переменной +i на n
      procedure Dec(var i: integer);
      -         -i 1 +        Уменьшает значение переменной +i на 1
      procedure Dec(var i: integer; n: integer);
      -         -i n +        Уменьшает значение переменной +i на n
      procedure Inc(var c: char);
      -         c 1 +        Увеличивает код символа c на 1
      procedure Inc(var e: System.Enum; n: integer);
      -         e - n +        Увеличивает значение перечислимого типа e +на n
      procedure Dec(var e: System.Enum);
      -         e 1 +        Уменьшает значение перечислимого типа e на 1
      procedure Dec(var e: System.Enum; n: integer);
      -         e 1 +        Уменьшает значение перечислимого типа e на 1
      function Succ(x: integer): integer;
      -         x +        Возвращает следующее за x значение
      function Succ(x: boolean): boolean;
      -         x +        Возвращает следующее за x значение
      function Succ(x: byte): byte;
      -         x +        Возвращает следующее за x значение
      function Succ(x: shortint): shortint;
      -         x +        Возвращает следующее за x значение
      function Succ(x: smallint): smallint;
      -         x +        Возвращает следующее за x значение
      function Succ(x: word): word;
      -         x +        Возвращает следующее за x значение
      function Succ(x: longword): longword;
      -         x +        Возвращает следующее за x значение
      function Succ(x: int64): int64;
      -         x +        Возвращает следующее за x значение
      function Succ(x: uint64): uint64;
      -         x +        Возвращает следующее за x значение
      function Succ(x: char): char;
      -         x +        Возвращает следующее за x значение
      @@ -170,69 +170,69 @@ function Succ(e: System.Enum): System.Enum;
      -         -e +        Возвращает следующее за +e значение
      function Pred(x: boolean): boolean;
      -         x +        Возвращает предшествующее x значение
      function Pred(x: byte): byte;
      -         x +        Возвращает предшествующее x значение
      function Pred(x: shortint): shortint;
      -         x +        Возвращает предшествующее x значение
      function Pred(x: smallint): smallint;
      -         x +        Возвращает предшествующее x значение
      function Pred(x: word): word;
      -         x +        Возвращает предшествующее x значение
      function Pred(x: integer): integer;
      -         x +        Возвращает предшествующее x значение
      function Pred(x: longword): longword;
      -         x +        Возвращает предшествующее x значение
      function Pred(x: int64): int64;
      -         x +        Возвращает предшествующее x значение
      function Pred(x: uint64): uint64;
      -         x +        Возвращает предшествующее x значение
      function Pred(x: char): char;
      -         x +        Возвращает предшествующее x значение
      @@ -240,65 +240,65 @@ function Pred(e: System.Enum): System.Enum
      -         +        Возвращает предшествующее -e +e значение
      function Odd(i: integer): boolean;
      -         True, i +        Возвращает True, если i нечетно
      function Odd(i: longword): boolean;
      -         True, i +        Возвращает True, если i нечетно
      function Odd(i: int64): boolean;
      -         True, i +        Возвращает True, если i нечетно
      function Odd(i: uint64): boolean;
      -         True, i +        Возвращает True, если i нечетно
      function Ord(a: char): byte;
      -         
      function Ord(a: integer): integer;
      -         +        Возвращает порядковый номер значения a
      function Ord(a: longword): longword;
      -         +        Возвращает порядковый номер значения a
      function Ord(a: int64): int64;
      -         +        Возвращает порядковый номер значения a
      function Ord(a: uint64): uint64;
      -         +        Возвращает порядковый номер значения a
      @@ -87,26 +87,26 @@ function OpenRead(fname: string): Text;
      -          fname, +         Возвращает текстовый файл с именем fname, открытый на чтение +         Возвращает текстовый файл с именем fname, открытый на дополнение @@ -114,98 +114,98 @@ procedure CloseFile(f: FileType);
      -         f +        Закрывает файл f
      procedure Assign(f: FileType; name: string);
      -         f name +        Связывает файловую переменную f с именем файла name
      procedure AssignFile(f: FileType; name: string);
      -         f name +        Связывает файловую переменную f с именем файла name
      procedure Reset(f: Text);
      -         f +        Открывает текстовый файл f на чтение
      procedure Reset(f: file of T);
      -         f +        Открывает типизированный файл f на чтение и запись
      procedure Reset(f: file);
      -         f +        Открывает нетипизированный файл f на чтение и запись
      procedure Rewrite(f: Text);
      -         f , . , +        Открывает текстовый файл f на запись, обнуляя его содержимое. Если файл существовал, он обнуляется
      procedure Rewrite(f: file of T);
      -         f , . , +        Открывает типизированный файл f на чтение и запись, обнуляя его содержимое. Если файл существовал, он обнуляется
      procedure Rewrite(f: file);
      -         f , . , +        Открывает нетипизированный файл f на чтение и запись, обнуляя его содержимое. Если файл существовал, он обнуляется
      procedure Append(f: Text);
      -         f +        Открывает текстовый f файл на дополнение
      function OpenWrite(fname: string): Text;
      -          fname, +         Возвращает текстовый файл с именем fname, открытый на запись
      function OpenAppend(fname: string): Text;
      -          fname,
      procedure Close(f: FileType);
      -         f +        Закрывает файл f
      function Eof(f: FileType): boolean;
      -         True, f +        Возвращает True, если достигнут конец файла f
      procedure Flush(f: FileType);
      -         +        Записывает содержимое буфера файла на диск
      procedure Erase(f: FileType);
      -         , f +        Удаляет файл, связанный с файловой переменной f
      procedure Rename(f: FileType; newname: string);
      -         , f, newname +        Переименовывает файл, связаный с файловой переменной f, давая ему имя newname
      function Eoln(f: Text): boolean;
      -         True, f +        Возвращает True, если достигнут конец строки в текстовом файле f
      function SeekEof(f: Text): boolean;
      -         , True, f +        Пропускает пробельные символы, после чего возвращает True, если достигнут конец текстового файла f
      function SeekEoln(f: Text): boolean;
      -         , True, f +        Пропускает пробельные символы, после чего возвращает True, если достигнут конец строки в текстовом файле f
      procedure Truncate(f: file of T);
      -         f, +        Усекает типизированный файл f, отбрасывая все элементы с позиции файлового указателя
      procedure Truncate(f: file);
      -         f, +        Усекает нетипизированный файл f, отбрасывая все элементы с позиции файлового указателя
      function FilePos(f: file of T): int64;
      -         f +        Возвращает текущую позицию файлового указателя в типизированном файле f
      function FilePos(f: file): int64;
      -         f +        Возвращает текущую позицию файлового указателя в нетипизированном файле f
      function FileSize(f: file of T): int64;
      -         f +        Возвращает количество элементов в типизированном файле f
      function FileSize(f: file): int64;
      -         f +        Возвращает количество байт в нетипизированном файле f
      procedure Seek(f: file of T; n: int64);
      -         f n +        Устанавливает текущую позицию файлового указателя в типизированном файле f на элемент с номером n
      procedure Seek(f: file; n: int64);
      -         f n +        Устанавливает текущую позицию файлового указателя в нетипизированном файле f на байт с номером n
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_file_name.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_file_name.html index 94fa5520e..dd5970e31 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_file_name.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_file_name.html @@ -9,43 +9,43 @@ -

      +

      Функции для работы с именами файлов

      function ExtractFileName(fname: string): string;
      -         fname +        Выделяет имя файла из полного имени файла fname
      function ExtractFileExt(fname: string): string;
      -         fname +        Выделяет расширение из полного имени файла fname
      function ExtractFilePath(fname: string): string;
      -         fname +        Выделяет путь из полного имени файла fname
      function ExtractFileDir(fname: string): string;
      -         fname +        Выделяет имя диска и путь из полного имени файла fname
      function ExtractFileDrive(fname: string): string;
      -         fname +        Выделяет путь из полного имени файла fname
      function ExpandFileName(fname: string): string;
      -         fname +        Возвращает полное имя файла fname
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_math.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_math.html index 7b242517e..51e535e4e 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_math.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_math.html @@ -34,233 +34,233 @@ -

      -

      - System Math - Delphi.

      +

      Математические функции

      +

      Интерфейс математических подпрограмм заимствован +преимущественно из модулей System и Math +системы Delphi.

      @@ -268,101 +268,101 @@ function RadToDeg(x: real): real;
      -         +        Переводит радианы в градусы
      function Sign(x: integer): integer;
      -         x +        Возвращает знак числа x
      function Sign(x: longword): integer;
      -         x +        Возвращает знак числа x
      function Sign(x: int64): integer;
      -         x +        Возвращает знак числа x
      function Sign(x: uint64): integer;
      -         x +        Возвращает знак числа x
      function Sign(x: real): integer;
      -         x +        Возвращает знак числа x
      function Abs(x: integer): integer;
      -         x +        Возвращает модуль числа x
      function Abs(x: longword): longword;
      -         x +        Возвращает модуль числа x
      function Abs(x: int64): int64;
      -         x +        Возвращает модуль числа x
      function Abs(x: uint64): uint64;
      -         x +        Возвращает модуль числа x
      function Abs(x: real): real;
      -         x +        Возвращает модуль числа x
      function Sin(x: real): real;
      -         x +        Возвращает синус числа x
      function Sinh(x: real): real;
      -         x +        Возвращает гиперболический синус числа x
      function Cos(x: real): real;
      -         x +        Возвращает косинус числа x
      function Cosh(x: real): real;
      -         x +        Возвращает гиперболический косинус числа x
      function Tan(x: real): real;
      -         x +        Возвращает тангенс числа x
      function Tanh(x: real): real;
      -         x +        Возвращает гиперболический тангенс числа x
      function ArcSin(x: real): real;
      -         x +        Возвращает арксинус числа x
      function ArcCos(x: real): real;
      -         x +        Возвращает арккосинус числа x
      function ArcTan(x: real): real;
      -         x +        Возвращает арктангенс числа x
      function Exp(x: real): real;
      -         x +        Возвращает экспоненту числа x
      function Ln(x: real): real;
      -         x +        Возвращает натуральный логарифм числа x
      function Log2(x: real): real;
      -         x 2 +        Возвращает логарифм числа x по основанию 2
      function Log10(x: real): real;
      -         x +        Возвращает десятичный логарифм числа x
      function LogN(base,x: real): real;
      -         x base +        Возвращает логарифм числа x по основанию base
      function Sqrt(x: real): real;
      -         x +        Возвращает квадратный корень числа x
      function Sqr(x: integer): int64;
      -         x +        Возвращает квадрат числа x
      function Sqr(x: longword): uint64;
      -         x +        Возвращает квадрат числа x
      function Sqr(x: int64): int64;
      -         x +        Возвращает квадрат числа x
      function Sqr(x: uint64): uint64;
      -         x +        Возвращает квадрат числа x
      function Sqr(x: real): real;
      -         x +        Возвращает квадрат числа x
      function Power(x,y: real): real;
      -         x y +        Возвращает x в степени y
      function Round(x: real): integer;
      -         x, +        Возвращает x, округленное до ближайшего целого
      function Trunc(x: real): integer;
      -         x +        Возвращает целую часть числа x
      function Int(x: real): real;
      -         x +        Возвращает целую часть числа x
      function Frac(x: real): real;
      -         x +        Возвращает дробную часть числа x
      function Floor(x: real): integer;
      -         , x +        Возвращает наибольшее целое, меньшее или равное x
      function Ceil(x: real): integer;
      -         , x +        Возвращает наименьшее целое, большее или равное x
      function DegToRad(x: real): real;
      -         +        Переводит градусы в радианы
      procedure Randomize;
      -         +        Инициализирует датчик псевдослучайных чисел
      procedure Randomize(seed: integer);
      -         , seed. seed +        Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности
      function Random(maxValue: integer): integer;
      -         0 maxValue-1 +        Возвращает случайное целое в диапазоне от 0 до maxValue-1
      function Random(a,b: integer): integer;
      -         a b +        Возвращает случайное целое в диапазоне от a до b
      function Random: real;
      -         [0..1) +        Возвращает случайное вещественное в диапазоне [0..1)
      function Max(a,b: integer): integer;
      -         a,b +        Возвращает максимальное из чисел a,b
      function Max(a,b: longword): longword;
      -         a,b +        Возвращает максимальное из чисел a,b
      function Max(a,b: int64): int64;
      -         a,b +        Возвращает максимальное из чисел a,b
      function Max(a,b: uint64): uint64;
      -         a,b +        Возвращает максимальное из чисел a,b
      function Max(a,b: real): real;
      -         a,b +        Возвращает максимальное из чисел a,b
      function Min(a,b: integer): integer;
      -         a,b +        Возвращает минимальное из чисел a,b
      function Min(a,b: longword): longword;
      -         a,b +        Возвращает минимальное из чисел a,b
      function Min(a,b: int64): int64;
      -         a,b +        Возвращает минимальное из чисел a,b
      function Min(a,b: uint64): uint64;
      -         a,b +        Возвращает минимальное из чисел a,b
      function Min(a,b: real): real;
      -         a,b +        Возвращает минимальное из чисел a,b
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_readwrite.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_readwrite.html index 87a26fa7c..529bd381a 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_readwrite.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_readwrite.html @@ -28,308 +28,308 @@ -

      -

      +

      Подпрограммы ввода-вывода

      +        Возвращает значение типа integer, введенное из текстового файла f +        Возвращает значение типа real, введенное из +текстового файла f +        Возвращает значение типа string, введенное из +текстового файла f +        Возвращает значение типа char, введенное из +текстового файла f +        Возвращает значение типа boolean, введенное из +текстового файла f @@ -337,58 +337,58 @@ integer;
      procedure Print(a,b,...);
      -          a,b,... , - +         Выводит значения a,b,... на экран, выводя после каждого значения + пробел +        Выводит значения a,b,... на экран, + выводя после каждого значения пробел, и осуществляет переход на новую строку
      procedure Read(a,b,...);
      -         a,b,... +        Вводит значения a,b,... с клавиатуры
      procedure Readln(a,b,...);
      -         a,b,... +        Вводит значения a,b,... с клавиатуры и осуществляет переход на следующую строку
      function ReadInteger: integer;
      -         integer, +        Возвращает значение типа integer, введенное с клавиатуры
      function ReadReal: real;
      -         real, - +        Возвращает значение типа real, введенное с +клавиатуры
      function ReadString: string;
      -         string, - +        Возвращает значение типа string, введенное с +клавиатуры
      function ReadChar: char;
      -         char, - +        Возвращает значение типа char, введенное с +клавиатуры
      function ReadBoolean: boolean;
      -         boolean, - +        Возвращает значение типа boolean, введенное с +клавиатуры
      function ReadlnInteger: integer;
      -         integer, , - +        Возвращает значение типа integer, введенное с клавиатуры, + и переходит на следующую строку ввода
      function ReadlnReal: real;
      -         real, -, +        Возвращает значение типа real, введенное с +клавиатуры, и переходит на следующую строку ввода
      function ReadlnString: string;
      -         string, -, +        Возвращает значение типа string, введенное с +клавиатуры, и переходит на следующую строку ввода
      function ReadlnChar: char;
      -         char, -, +        Возвращает значение типа char, введенное с +клавиатуры, и переходит на следующую строку ввода
      function ReadlnBoolean: boolean;
      -         boolean, -, +        Возвращает значение типа boolean, введенное с +клавиатуры, и переходит на следующую строку ввода
      function ReadInteger(prompt: string): integer;
      -         - integer, +        Выводит приглашение к вводу и + возвращает значение типа integer, введенное с клавиатуры
      function ReadReal(prompt: string): real;
      -         - real, - +        Выводит приглашение к вводу и + возвращает значение типа real, введенное с +клавиатуры
      function ReadString(prompt: string): string;
      -         - string, - +        Выводит приглашение к вводу и + возвращает значение типа string, введенное с +клавиатуры
      function ReadChar(prompt: string): char;
      -         - char, - +        Выводит приглашение к вводу и + возвращает значение типа char, введенное с +клавиатуры
      function ReadBoolean(prompt: string): boolean;
      -         - boolean, - +        Выводит приглашение к вводу и + возвращает значение типа boolean, введенное с +клавиатуры
      function ReadlnInteger(prompt: string): integer;
      -         - integer, , - +        Выводит приглашение к вводу и + возвращает значение типа integer, введенное с клавиатуры, + и переходит на следующую строку ввода
      function ReadlnReal(prompt: string): real;
      -         - real, -, +        Выводит приглашение к вводу и + возвращает значение типа real, введенное с +клавиатуры, и переходит на следующую строку ввода
      function ReadlnString(prompt: string): string;
      -         - string, -, +        Выводит приглашение к вводу и + возвращает значение типа string, введенное с +клавиатуры, и переходит на следующую строку ввода
      function ReadlnChar(prompt: string): char;
      -         - char, -, +        Выводит приглашение к вводу и + возвращает значение типа char, введенное с +клавиатуры, и переходит на следующую строку ввода
      function ReadlnBoolean(prompt: string): boolean;
      -         - boolean, -, +        Выводит приглашение к вводу и + возвращает значение типа boolean, введенное с +клавиатуры, и переходит на следующую строку ввода
      function ReadSeqInteger(n: integer): array of integer;
      -          n , +         Возвращает последовательность n целых, введенных с клавиатуры
      function ReadSeqReal(n: integer): array of real;
      -          n , +         Возвращает последовательность n целых, введенных с клавиатуры
      function ReadSeqString(n: integer): array of string;
      -          n , +         Возвращает последовательность n целых, введенных с клавиатуры
      function ReadSeqInteger(const prompt: string; n: integer): array of integer;
      -          n - , +         Выводит приглашение к вводу и возвращает последовательность n + целых, введенных с клавиатуры
      function ReadSeqReal(const prompt: string; n: integer): array of real;
      -          n - , +         Выводит приглашение к вводу и возвращает последовательность n + целых, введенных с клавиатуры
      function ReadSeqString(const prompt: string; n: integer): array of string;
      -          n , - +         Выводит приглашение к вводу и возвращает последовательность n целых, + введенных с клавиатуры
      procedure Read(f: Text; a,b,...);
      -         a,b,... f +        Вводит значения a,b,... из текстового файла f
      procedure Readln(f: Text; a,b,...);
      -         a,b,... f +        Вводит значения a,b,... из текстового файла f и осуществляет переход на следующую строку
      function ReadInteger(f: Text): integer;
      -         integer, f
      function ReadReal(f: Text): integer;
      -         real, - f
      function ReadString(f: Text): integer;
      -         string, - f
      function ReadChar(f: Text): integer;
      -         char, - f
      function ReadBoolean(f: Text): integer;
      -         boolean, - f
      procedure Readln(f: file of T; a,b,...);
      -         a,b,... f +        Вводит значения a,b,... из типизированного файла f и осуществляет переход на следующую строку
      procedure Readln(f: file; a,b,...);
      -         a,b,... f +        Вводит значения a,b,... из нетипизированного файла f и осуществляет переход на следующую строку
      procedure Write(a,b,...);
      -         a,b,... . - +        Выводит значения a,b,... на экран. + Для вывода значений определяемого пользователем типа используется метод - ToString + ToString этого типа
      procedure WriteFormat(formatstr: string; a,b,...);
      -         a,b,... - formatstr +        Выводит значения a,b,... на экран +согласно форматной строке formatstr
      procedure Writeln(a,b,...);
      -         a,b,... +        Выводит значения a,b,... на экран и осуществляет переход на новую строку
      procedure WritelnFormat(formatstr: string; a,b,...);
      -         a,b,... - formatstr +        Выводит значения a,b,... на экран +согласно форматной строке formatstr и осуществляет переход на следующую строку
      procedure Println(a,b,...);
      -         a,b,... , - ,
      procedure Write(f: Text; a,b,...);
      -         a,b,... f +        Выводит значения a,b,... в текстовый файл f
      procedure WriteFormat(f: Text; formatstr: string; a,b,...);
      -         a,b,... - f formatstr +        Выводит значения a,b,... в +текстовый файл f согласно форматной строке formatstr
      procedure Writeln(f: Text; a,b,...);
      -         a,b,... f +        Выводит значения a,b,... в текстовый файл f и осуществляет переход на новую строку
      procedure WritelnFormat(f: Text; formatstr: string; a,b,...);
      -         a,b,... - f formatstr +        Выводит значения a,b,... в +текстовый файл f согласно форматной строке formatstr и осуществляет переход на следующую строку
      procedure Write(f: file of T; a,b,...);
      -         a,b,... f +        Выводит значения a,b,... в типизированный файл f
      procedure Write(f: file; a,b,...);
      -         a,b,... f +        Выводит значения a,b,... в нетипизированный файл f
      @@ -397,18 +397,18 @@ integer;
      procedure Print(f: Text; a,b,...);
      -          a,b,... - , - +         Выводит значения a,b,... в + текстовый файл, выводя после каждого значения + пробел +        Выводит значения a,b,... в + текстовый файл, + выводя после каждого значения пробел, и осуществляет переход на новую строку
      procedure Println(f: Text; a,b,...);
      -         a,b,... - , - ,
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_seq.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_seq.html index 29677c3f3..374b1c3d6 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_seq.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_seq.html @@ -13,123 +13,123 @@ -

      +

      Функции для работы с последовательностями

      +         Возвращает последовательность целых от a до b +         Возвращает последовательность символов от c1 до c2 +         Возвращает последовательность вещественных в точках разбиения + отрезка [a,b] на n равных частей +         Возвращает последовательность целых от a до b с шагом step +         Возвращает последовательность указанных элементов +         Возвращает последовательность из count элементов, начинающуюся с + first, с функцией next перехода от предыдущего к следующему +         Возвращает последовательность из count элементов, начинающуюся с + first и second, с функцией next перехода от двух предыдущих к следующему +         Возвращает последовательность из count элементов x +         Возвращает последовательность из count элементов, заполненных + значениями f(i) +         Возвращает последовательность элементов с начальным значением + first, функцией next перехода от предыдущего к следующему и условием + pred продолжения последовательности +         Возвращает последовательность элементов, начинающуюся с first и + second, с функцией next перехода от двух предыдущих к следующему и условием + pred продолжения последовательности +         Возвращает последовательность из n случайных целых элементов +         Возвращает последовательность из n случайных вещественных элементов +         Возвращает последовательность из n целых, введенных с клавиатуры +         Выводит приглашение к вводу и возвращает последовательность из n + целых, введенных с клавиатуры +         Возвращает последовательность из n вещественных, введенных с + клавиатуры +         Выводит приглашение к вводу и возвращает последовательность из n + вещественных, введенных с клавиатуры +         Возвращает последовательность из n строк, введенных с клавиатуры +         Выводит приглашение к вводу и возвращает + последовательность из n строк, + введенных с клавиатуры
      function Range(a,b: integer): sequence of integer;
      -          a b
      function Range(c1,c2: char): sequence of char;
      -          c1 c2
      function Range(a,b: real; n: integer): sequence of real;
      -          - [a,b] n
      function Range(a,b,step: integer): sequence of integer;
      -          a b step
      function Seq<T>(params a: array of T): sequence of T;
      -         
      function SeqGen<T>(count: integer; first: T; next: T->T): sequence of T;
      -          count , - first, next
      function SeqGen<T>(count: integer; first,second: T; next: (T,T)->T): sequence of T;
      -          count , - first second, next
      function SeqFill<T>(count: integer; x: T): sequence of T;
      -          count x
      function SeqGen<T>(count: integer; f: integer->T): sequence of T;
      -          count , - f(i)
      function SeqWhile<T>(first: T; next: T->T; pred: T->boolean): sequence of T;
      -          - first, next - pred
      function SeqWhile<T>(first,second: T; next: (T,T)->T; pred: T->boolean): sequence of T;
      -          , first - second, next - pred
      function SeqRandom(n: integer := 10; a: integer := 0; b: integer := 100): sequence of integer;
      -          n
      function SeqRandomReal(n: integer := 10; a: real := 0; b: real := 10): sequence of real;
      -          n
      function ReadSeqInteger(n: integer): sequence of integer;
      -          n ,
      function ReadSeqInteger(const prompt: string; n: integer): sequence of integer;
      -          n - ,
      function ReadSeqReal(n: integer): sequence of real;
      -          n , -
      function ReadSeqReal(const prompt: string; n: integer): sequence of real;
      -          n - ,
      function ReadSeqString(n: integer): sequence of string;
      -          n ,
      function ReadSeqString(const prompt: string; n: integer): sequence of string;
      -          - n , -
      \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_string.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_string.html index d313318e1..a5b90c98d 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_string.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_string.html @@ -40,33 +40,33 @@ -

      +

      Подпрограммы для работы с символами и строками

      +        Преобразует код в символ в кодировке Unicode + (синоним Chr) +         Преобразует код в символ в кодировке Windows @@ -74,290 +74,290 @@ function OrdUnicode(a: char): word;
      -         Unicode - ( Ord) +        Преобразует символ в код в кодировке Unicode + (синоним Ord) +        Преобразует символ в код в кодировке Windows
      function Chr(a: byte): char;
      -          +         Преобразует код в символ
      function ChrUnicode(a: word): char;
      -         Unicode - ( Chr)
      function ChrAnsi(a: word): char;
      -          Windows
      function Ord(a: char): word;
      -          +         Преобразует символ в код
      function OrdAnsi(a: char): word;
      -         Windows
      function/b> UpperCase(ch: char): char;
      -         +        Преобразует символ в верхний регистр
      function LowerCase(ch: char): char;
      -         +        Преобразует символ в нижний регистр
      function UpCase(ch: char): char;
      -         +        Преобразует символ в верхний регистр
      function LowCase(ch: char): char;
      -         +        Преобразует символ в нижний регистр
      function Pos(subs,s: string): integer;
      -         subs s. , 0 +        Возвращает позицию подстроки subs в строке s. Если не найдена, возвращает 0
      function PosEx(subs,s: string; from: integer := 1): integer;
      -         subs s from. , 0 +        Возвращает позицию подстроки subs в строке s начиная с позиции from. Если не найдена, возвращает 0
      function Length(s: string): integer;
      -         +        Возвращает длину строки
      procedure SetLength(var s: string; n: integer);
      -         s n +        Устанавливает длину строки s равной n
      procedure Insert(source: string; var s: string; index: integer);
      -         source s index +        Вставляет подстроку source в строку s с позиции index
      procedure Delete(var s: string; index,count: integer);
      -         s count index +        Удаляет из строки s count символов с позиции index
      function Copy(s: string; index,count: integer): string;
      -         s count index +        Возвращает подстроку строки s длины count с позиции index
      function Concat(s1,s2,...: string): string;
      -         , s1,s2,... +        Возвращает строку, являющуюся результатом слияния строк s1,s2,...
      function Concat(s1,s2: string): string;
      -         , s1 s2 +        Возвращает строку, являющуюся результатом слияния строк s1 и s2
      function LowerCase(s: string): string;
      -         +        Возвращает строку в нижнем регистре
      function UpperCase(s: string): string;
      -         +        Возвращает строку в верхнем регистре
      function StringOfChar(ch: char; count: integer): string;
      -         , count ch +        Возвращает строку, состоящую из count символов ch
      function ReverseString(s: string): string;
      -         +        Возвращает инвертированную строку
      function CompareStr(s1,s2: string): integer;
      -         . < 0 s1 0 s1>s2 = 0 s1=s2 +        Сравнивает строки. Возвращает значение < 0 если s1 0 если s1>s2 и = 0 если s1=s2
      function LeftStr(s: string; count: integer): string;
      -         count s +        Возвращает первые count символов строки s
      function RightStr(s: string; count: integer): string;
      -         count s +        Возвращает последние count символов строки s
      function Trim(s: string): string;
      -         +        Возвращает строку с удаленными начальными и конечными пробелами
      function TrimLeft(s: string): string;
      -         +        Возвращает строку с удаленными начальными пробелами
      function TrimRight(s: string): string;
      -         +        Возвращает строку с удаленными конечными пробелами
      function Format(fmtstr: string; params pars: array of object): string;
      -         , fmtstr pars +        Возвращает отформатированную строку, построенную по форматной строке fmtstr и списку форматиуемых параметров pars
      function StrToInt(s: string): integer;
      -         +        Преобразует строковое представление целого числа к числовому значению
      function StrToInt64(s: string): int64;
      -         +        Преобразует строковое представление целого числа к числовому значению
      function StrToFloat(s: string): real;
      -         +        Преобразует строковое представление вещественного числа к числовому значению
      function TryStrToInt(s: string; var value: integer): boolean;
      -         s value. False +        Преобразует строковое представление s целого числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False
      function TryStrToInt64(s: string; var value: int64): boolean;
      -         s value. False +        Преобразует строковое представление s целого числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False
      function TryStrToFloat(s: string; var value: real): boolean;
      -         s value. False +        Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False
      function TryStrToFloat(s: string; var value: single): boolean;
      -         s value. False +        Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False
      procedure Val(s: string; var value: integer; var err: integer);
      -         s value. , err=0, err>0 +        Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0
      procedure Val(s: string; var value: shortint; var err: integer);
      -         s value. , err=0, err>0 +        Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0
      procedure Val(s: string; var value: smallint; var err: integer);
      -         s value. , err=0, err>0 +        Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0
      procedure Val(s: string; var value: int64; var err: integer);
      -         s value. , err=0, err>0 +        Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0
      procedure Val(s: string; var value: byte; var err: integer);
      -         s value. , err=0, err>0 +        Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0
      procedure Val(s: string; var value: word; var err: integer);
      -         s value. , err=0, err>0 +        Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0
      procedure Val(s: string; var value: longword; var err: integer);
      -         s value. , err=0, err>0 +        Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0
      procedure Val(s: string; var value: uint64; var err: integer);
      -         s value. , err=0, err>0 +        Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0
      procedure Val(s: string; var value: real; var err: integer);
      -         s value. , err=0, err>0 +        Преобразует строковое представление s вещественного числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0
      procedure Val(s: string; var value: single; var err: integer);
      -         s value. , err=0, err>0 +        Преобразует строковое представление s вещественного числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0
      procedure Str(i: integer; var s: string);
      -         i s +        Преобразует целое значение i к строковому представлению и записывает результат в s
      procedure Str(r: real; var s: string);
      -         r s +        Преобразует вещественное значение r к строковому представлению и записывает результат в s
      function IntToStr(a: integer): string;
      -         +        Преобразует целое число к строковому представлению
      function IntToStr(a: int64): string;
      -         +        Преобразует целое число к строковому представлению
      function FloatToStr(a: real): string;
      -         +        Преобразует вещественное число к строковому представлению
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_system.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_system.html index 097257513..80ed118f6 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_system.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_system.html @@ -23,50 +23,50 @@ -

      ,

      +

      Подпрограммы для работы с файлами, каталогами и дисками

      +         Считывает содержимое файла с кодировкой en в строку @@ -84,8 +84,8 @@ procedure WriteLines(path: string; ss: sequence of string; en: Encoding);
      -          en, - +         Создает новый файл с кодировкой en, записывает в него строки из + последовательности @@ -94,7 +94,7 @@ procedure WriteAllLines(path: string; ss: array of string);
      -          , +         Создает новый файл, записывает в него строки из массива @@ -103,8 +103,8 @@ procedure WriteAllLines(path: string; ss: array of string; en: Encoding);
      -          en, - +         Создает новый файл с кодировкой en, записывает в него строки из + массива @@ -112,7 +112,7 @@ procedure WriteAllText(path: string; s: string);
      -          , +         Создает новый файл, записывает в него содержимое строки @@ -121,8 +121,8 @@ procedure WriteAllText(path: string; s: string; en: Encoding);
      -          en, - +         Создает новый файл с кодировкой en, записывает в него содержимое + строки @@ -130,8 +130,8 @@ function EnumerateFiles(path: string; searchPattern: string := '*.*'): sequence of string;
      -          , - +         Возвращает последовательность имен файлов по заданному пути, + соответствующих шаблону поиска @@ -139,122 +139,122 @@ function EnumerateAllFiles(path: string; searchPattern: string := '*.*'): sequence of string;
      -          , - , +         Возвращает последовательность имен файлов по заданному пути, + соответствующих шаблону поиска, включая подкаталоги
      function ReadLines(path: string): sequence of string;
      -          - +         Считывает строки из файла и превращает их в последовательность + строк
      function ReadLines(path: string; en: Encoding): sequence of string;
      -          en - +         Считывает строки из файла с кодировкой en и превращает их в + последовательность строк
      function ReadAllLines(path: string): array of string;
      -          +         Считывает строки из файла в массив строк
      function ReadAllLines(path: string; en: Encoding): array of string;
      -          en +         Считывает строки из файла с кодировкой en в массив строк
      function ReadAllText(path: string): string;
      -          +         Считывает содержимое файла в строку
      function ReadAllText(path: string; en: Encoding): string;
      -          en
      @@ -74,8 +74,8 @@ procedure WriteLines(path: string; ss: sequence of string);
      -          , - +         Создает новый файл, записывает в него строки из + последовательности
      function EnumerateDirectories(path: string): sequence of string;
      -          +         Возвращает последовательность имен каталогов по заданному пути
      function EnumerateAllDirectories(path: string): sequence of string;
      -          , -   +         Возвращает последовательность имен каталогов по заданному пути, + включая подкаталоги 
      function GetDir: string;
      -         +        Возвращает текущий каталог
      procedure ChDir(s: string);
      -         +        Меняет текущий каталог
      procedure MkDir(s: string);
      -         +        Создает каталог
      procedure RmDir(s: string);
      -         +        Удаляет каталог
      function CreateDir(s: string): boolean;
      -         . True, +        Создает каталог. Возвращает True, если каталог успешно создан
      function DeleteFile(s: string): boolean;
      -         . , False +        Удаляет файл. Если файл не может быть удален, то возвращает False
      function GetCurrentDir: string;
      -         +        Возвращает текущий каталог
      function RemoveDir(s: string): boolean;
      -         . True, +        Удаляет каталог. Возвращает True, если каталог успешно удален
      function RenameFile(name, newname: string): boolean;
      -         name, newname. True, +        Переименовывает файл name, давая ему новое имя newname. Возвращает True, если файл успешно переименован
      function SetCurrentDir(s: string): boolean;
      -         . True, - +        Устанавивает текущий каталог. Возвращает True, +если каталог успешно установлен
      function ChangeFileNameExtension(name,newext: string): string;
      -         name newext +        Изменяет расширение файла с именем name на newext
      function FileExists(name: string): boolean;
      -         True, name +        Возвращает True, если файл с именем name существует
      function DiskFree(diskname: string): int64;
      -         diskname +        Возвращает свободное место в байтах на диске с именем diskname
      function DiskSize(diskname: string): int64;
      -         diskname +        Возвращает размер в байтах на диске с именем diskname
      function DiskFree(disk: integer): int64;
      -         disk. disk=0 - , disk=1 - A: , disk=2 - B: .. +        Возвращает свободное место в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д.
      function DiskSize(disk: integer): int64;
      -         disk. disk=0 - , disk=1 - A: , disk=2 - B: .. +        Возвращает размер в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д.
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types.html index 6ca1a0ab7..34dbfbf99 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types.html @@ -19,100 +19,100 @@ -

      +

      Стандартные типы

      +        Тип короткой размерной строки
      shortstring = string[255]
      -
              
      PBoolean
      -         boolean +        Тип указателя на boolean
      PByte
      -         byte +        Тип указателя на byte
      PShortint
      -         shortint +        Тип указателя на shortint
      PChar
      -         char +        Тип указателя на char
      PSmallint
      -         smallint +        Тип указателя на smallint
      PWord
      -         word +        Тип указателя на word
      PPointer
      -         pointer +        Тип указателя на pointer
      PInteger
      -         integer +        Тип указателя на integer
      PLongword
      -         longword +        Тип указателя на longword
      PLongint
      -         longint +        Тип указателя на longint
      PInt64
      -         int64 +        Тип указателя на int64
      PUInt64
      -         uint64 +        Тип указателя на uint64
      PSingle
      -         single +        Тип указателя на single
      PReal
      -         real +        Тип указателя на real
      PDouble
      -         double +        Тип указателя на double
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_collections.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_collections.html index 0dca180de..eeabb1c2b 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_collections.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_collections.html @@ -21,102 +21,102 @@ -

      +

      Классы коллекций и связанные типы

      +        Динамический массив +         Стек - набор элементов, реализованных по принципу "последний + вошел-первый вышел" +         Базовый класс для реализации интерфейса IEqualityComparer<T>
      List<T>
      -
              
      Stack<T>
      -          - , " - - "
      Queue<T>
      -          - , " - - " +         Очередь - набор элементов, реализованных по принципу "первый + вошел-первый вышел"
      LinkedList<T>
      -          +         Двусвязный список
      LinkedListNode<T>
      -          +         Узел двусвязного списка
      HashSet<T>
      -          +         Множество значений
      SortedSet<T>
      -          +         Упорядоченное множество значений
      Dictionary<Key,Value>
      -          ( -), - - +         Ассоциативный массив (набор пар Ключ-Значение), реализованный на + базе хеш-таблицы
      SortedDictionary<Key,Value>
      -          ( -), - +         Ассоциативный массив (набор пар ключ-значение), реализованный на + базе бинарного дерева поиска
      SortedList<Key,Value>
      -          ( -), - +         Ассоциативный массив (набор пар ключ-значение), реализованный на + базе динамического массива пар
      KeyValuePair<Key,Value>
      -          - +         Пара Ключ-Значение для ассоциативного массива
      IEnumerable<T>
      -         , - +         Интерфейс, предоставляющий перечислитель для перебора элементов + коллекции
      IEnumerator<T>
      -          +         Интерфейс для перебора элементов коллекции
      IComparer<T>
      -          +         Интерфейс для сравнения двух элементов
      Comparer<T>
      -          IComparer<T> +         Базовый класс для реализации интерфейса IComparer<T>
      IEqualityComparer<T>
      -          +         Интерфейс для сравнения двух элементов на равенство
      EqualityComparer<T>
      -          IEqualityComparer<T>
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_common.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_common.html index 8a6118339..c47a1170f 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_common.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_common.html @@ -16,33 +16,33 @@ -

      +

      Общие типы

      +        Тип короткой размерной строки +         Тип даты и времени
      shortstring = string[255]
      -
              
      DateTime
      -         
      Tuple
      -          +         Тип кортежа
      StringBuilder
      -          +         Тип изменяемой строки символов
      Encoding
      -          +         Тип кодировки символов
      TextFile
      -          text +         Синоним типа text
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_pointers.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_pointers.html index 97871cec3..ce61f087c 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_pointers.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_pointers.html @@ -18,24 +18,24 @@ -

      +

      Типы указателей

      @@ -43,74 +43,74 @@ PChar
      -         char +        Тип указателя на char
      PBoolean
      -         boolean +        Тип указателя на boolean
      PByte
      -         byte +        Тип указателя на byte
      PShortint
      -         shortint +        Тип указателя на shortint
      PSmallint
      -         smallint +        Тип указателя на smallint
      PWord
      -         word +        Тип указателя на word
      PPointer
      -         pointer +        Тип указателя на pointer
      PInteger
      -         integer +        Тип указателя на integer
      PLongword
      -         longword +        Тип указателя на longword
      PLongint
      -         longint +        Тип указателя на longint
      PInt64
      -         int64 +        Тип указателя на int64
      PUInt64
      -         uint64 +        Тип указателя на uint64
      PSingle
      -         single +        Тип указателя на single
      PReal
      -         real +        Тип указателя на real
      PDouble
      -         double +        Тип указателя на double
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_proc.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_proc.html index a095c900a..dcc116372 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_proc.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_proc.html @@ -17,65 +17,65 @@ -

      +

      Стандартные процедурные типы

      +        Представляет действие без параметров
      Action0
      -
              
      Action<T>
      -          +         Представляет действие с одним параметром
      Action2<T1,T2>
      -          +         Представляет действие с двумя параметрами
      Action3<T1,T2,T3>
      -          +         Представляет действие с тремя параметрами
      Func0<Res>
      -          +         Представляет функцию без параметров
      Func<T,Res>
      -          +         Представляет функцию с одним параметром
      IntFunc = Func<integer,integer>
      -          , - +         Представляет функцию с одним параметром целого типа, возвращающую + целое
      RealFunc = Func<real,real>
      -          , - +         Представляет функцию с одним параметром вещественного типа, + возвращающую вещественное
      StringFunc = Func<string,string>
      -          , - +         Представляет функцию с одним параметром строкового типа, + возвращающую строковое
      Func2<T1,T2,Res>
      -          +         Представляет функцию с двумя параметрами
      Func3<T1,T2,T3,Res>
      -          +         Представляет функцию с тремя параметрами
      Predicate<T>
      -          , boolean +         Представляет функцию с одним параметром, возвращающую boolean
      Predicate2<T1,T2>
      -          , boolean +         Представляет функцию с двумя параметрами, возвращающую boolean
      Predicate3<T1,T2,T3>
      -          , boolean +         Представляет функцию с тремя параметрами, возвращающую boolean
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_regex.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_regex.html index 89a7a410b..54b60b1ad 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_regex.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Old2016/stand_types_regex.html @@ -10,38 +10,38 @@ -

      ,

      +

      Типы, связанные с регулярными выражениями

      +         Представляет регулярное выражение +         Представляет результаты из отдельного совпадения регулярного + выражения +         Представляет набор успешных совпадений регулярного выражения +         Представляет параметры регулярного выражения +         Представляет результаты из одной группы при выполнении Regex.Match +         Представляет результаты из набора групп при выполнении Regex.Match
      Regex
      -         
      Match
      -          -
      MatchEvaluator
      -          , +         Представляет метод, вызываемый при обнаружении совпадения в Regex.Replace
      MatchCollection
      -         
      RegexOptions
      -         
      RegexGroup
      -          Regex.Match
      RegexGroupCollection
      -          Regex.Match
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/_main.html b/PABCNetHelp/LangGuide/PABCSystemUnit/_main.html index f3391e50d..e39af4bcd 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/_main.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/_main.html @@ -11,65 +11,65 @@ -

      PABCSystem

      -

      PABCSystem - . -, , , , , .

      -

      +

      Обзор системного модуля PABCSystem

      +

      Модуль PABCSystem называется системным +и автоматически подключается первым к любой программе или модулю. Он содержит ряд +процедур, функций, констант, типов, методов расширения, перегруженных операций.

      +

      Стандартные типы и константы

      -

      +

      Стандартные подпрограммы

      -

      +

      Генерация объектов структурированных типов

      -

      , PABCSystem

      +

      Методы расширения, определенные в модуле PABCSystem

      -

      +

      Методы типов файлов

      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/stand_binary_files_methods.html b/PABCNetHelp/LangGuide/PABCSystemUnit/stand_binary_files_methods.html index f0d827c75..b0ca136a2 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/stand_binary_files_methods.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/stand_binary_files_methods.html @@ -20,95 +20,95 @@ -

      -

      file - :

      +

      Методы бестиповых двоичных файлов

      +

      Для бестиповых двоичных файлов file +определены следующие методы:

        +         Открывает существующий бестиповой файл на чтение и запись. Если файл не существовал, он создаётся, если + существовал, он обнуляется +         Открывает существующий бестиповой файл на чтение и запись в + указанной кодировке. Если файл не существовал, он создаётся, если + существовал, он обнуляется +         Возвращает количество байт в бестиповом файле +         Устанавливает текущую позицию файлового указателя в бестиповом + файле на байт с номером n +         Усекает + бестиповой файл, отбрасывая все элементы с позиции + файлового указателя +         Записывает данные из байтового массива в бестиповой файл +         Считывает указанное количество байтов из бестипового файла в + байтовый массив +         Считывает целое из бестипового файла +         Считывает логическое из бестипового файла +         Считывает байт из бестипового файла +         Считывает символ из бестипового файла +         Считывает + вещественное из бестипового файла +         Считывает строку из бестипового файла
      procedure Reset;
      -          +         Открывает существующий бестиповой файл на чтение и запись
      procedure Rewrite;
      -          . , , - ,
      procedure Reset(en: Encoding);
      -          - +         Открывает существующий бестиповой файл на чтение и запись в + указанной кодировке
      procedure Rewrite(en: Encoding);
      -          - . , , - ,
      function Position: int64;
      -          - +         Возвращает или + устанавливает текущую позицию файлового указателя в бестиповом файле
      function Size: int64;
      -         
      procedure Seek(n: int64);
      -          - n
      procedure Truncate;
      -          - , -
      procedure WriteBytes(a: array of byte);
      -         
      function ReadBytes(count: integer): array of byte;
      -          -
      function ReadInteger: integer;
      -         
      function ReadBoolean: boolean;
      -         
      function ReadByte: byte;
      -         
      function ReadChar: char;
      -         
      function ReadReal: real;
      -          -
      function ReadString: string;
      -         
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/stand_common_files_methods.html b/PABCNetHelp/LangGuide/PABCSystemUnit/stand_common_files_methods.html index ed03d5fa1..d89860c5d 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/stand_common_files_methods.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/stand_common_files_methods.html @@ -12,50 +12,50 @@ -

      -

      - (Text, +

      Общие методы файловых типов

      +

      Для +всех стандартных файловых типов (Text, file, file of T) - :

      +определены следующие методы:

        +         Возвращает имя файла +         Возвращает полное имя файла +         Возвращает True, если достигнут конец файла, и False в противном + случае +         Закрывает файл +         Удаляет файл +         Переименовывает файл, давая ему имя newname
      procedure Write(a,b,...);
      -          a, b, ... +         Записывает в файл значения a, b, ...
      function Name: string;
      -         
      function FullName: string;
      -         
      function Eof: boolean;
      -          True, , False -
      procedure Close;
      -         
      procedure Erase;
      -         
      procedure Rename(newname: string);
      -          , newname
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/stand_text_files_methods.html b/PABCNetHelp/LangGuide/PABCSystemUnit/stand_text_files_methods.html index 98c020b45..24973d415 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/stand_text_files_methods.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/stand_text_files_methods.html @@ -36,202 +36,202 @@ -

      -

      - ( Text) - :

      +

      Методы текстовых файлов

      +

      Для +текстовых файлов (тип Text) +определены следующие методы:

        +         Записывает в файл значения a, b, ... +         Записывает в файл значения a, b, ... + и осуществляет переход на следующую строку +         Записывает в файл значения a, b, ..., + разделяя их пробелами +         Записывает в файл значения a, b, ..., + разделяя их пробелами, и осуществляет переход на следующую строку +         Возвращает значение типа integer, введенное из текстового файла +         Возвращает значение типа real, введенное из текстового файла +         Возвращает значение типа char, введенное из текстового файла +         Возвращает значение типа string, введенное из текстового файла, + без перехода на следующую строку +         Возвращает значение типа boolean, введенное из текстового файла +         Возвращает слово, введенное из текстового файла +         Возвращает значение типа integer, введенное из текстового файла, + и переходит на следующую строку +         Возвращает значение типа real, введенное из текстового файла, и + переходит на следующую строку +         Возвращает значение типа char, введенное из текстового файла, и + переходит на следующую строку +         Возвращает значение типа string, введенное из текстового файла, + и переходит на следующую строку +         Возвращает значение типа boolean, введенное из текстового файла, + и переходит на следующую строку +         Возвращает слово, введенное из текстового файла, и переходит на + следующую строку +         Возвращает True, если достигнут конец + файла, и False в + противном случае +         Возвращает True, если достигнут конец строки, и False в + противном случае +         Пропускает пробельные символы, после чего возвращает True, если + достигнут конец файла +         Пропускает пробельные символы, после чего возвращает True, если + достигнут конец строки в файле +         Возвращает имя файла +         Возвращает полное имя файла +         Открывает текстовый файл на чтение в кодировке Windows +         Открывает текстовый файл на чтение в указанной кодировке +         Открывает текстовый файл на + запись в кодировке Windows +         Открывает текстовый файл на + запись в указанной кодировке +         Открывает текстовый файл на + дополнение в кодировке Windows +         Открывает текстовый файл на + дополнение в указанной кодировке +         Закрывает файл +         Записывает содержимое буфера файла на диск +         Возвращает в виде строки содержимое файла от текущего положения + до конца +         Удаляет файл (файл должен быть закрыт) +         Переименовывает файл, давая ему имя newname (файл должен быть + закрыт) +         Возвращает последовательность строк открытого текстового файла
      procedure Write(a,b,...);
      -          a, b, ...
      procedure Writeln(a,b,...);
      -          a, b, ... -
      procedure Print(a,b,...);
      -          a, b, ..., -
      procedure Println(a,b,...);
      -          a, b, ..., - ,
      function ReadInteger: integer;
      -          integer,
      function ReadReal: real;
      -          real,
      function ReadChar: char;
      -          char,
      function ReadString: string;
      -          string, , -
      function ReadBoolean: boolean;
      -          boolean,
      function ReadWord: string;
      -          ,
      function ReadlnInteger: integer;
      -          integer, , -
      function ReadlnReal: real;
      -          real, , -
      function ReadlnChar: char;
      -          char, , -
      function ReadlnString: string;
      -          string, , -
      function ReadlnBoolean: boolean;
      -          boolean, , -
      function ReadlnWord: string;
      -          , , -
      function Eof: boolean;
      -          True, - , False -
      function Eoln: boolean;
      -          True, , False -
      function SeekEof: boolean;
      -          , True, -
      function SeekEoln: boolean;
      -          , True, -
      function Name: string;
      -         
      function FullName: string;
      -         
      procedure Reset;
      -          Windows
      procedure Reset(en: Encoding);
      -         
      procedure Rewrite;
      -          - Windows
      procedure Rewrite;
      -          -
      procedure Append;
      -          - Windows
      procedure Append;
      -          -
      procedure Close;
      -         
      procedure Flush;
      -         
      function ReadToEnd: string;
      -          -
      procedure Erase;
      -          ( )
      procedure Rename(newname: string);
      -          , newname ( - )
      function Lines: sequence of string;
      -         
      diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/stand_typed_files_methods.html b/PABCNetHelp/LangGuide/PABCSystemUnit/stand_typed_files_methods.html index c62f045d4..ea30234a7 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/stand_typed_files_methods.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/stand_typed_files_methods.html @@ -10,35 +10,35 @@ -

      -

      - file of T - :

      +

      Методы типизированных файлов

      +

      Для +типизированных файлов file of T +определены следующие методы:

        +         Возвращает количество элементов в + типизированном файле +         Устанавливает текущую позицию файлового указателя в + типизированном + файле на элемент с номером n +         Усекает типизированный файл, отбрасывая все элементы с позиции + файлового указателя
      function Position: int64;
      -          - +         Возвращает текущую позицию файлового указателя в + типизированном файле
      function Size: int64;
      -          -
      procedure Seek(n: int64);
      -          - - n
      procedure Truncate;
      -          , -
      diff --git a/PABCNetHelp/LangGuide/ProcFunc/defaultparams.html b/PABCNetHelp/LangGuide/ProcFunc/defaultparams.html index f842dca5d..03b3abb09 100644 --- a/PABCNetHelp/LangGuide/ProcFunc/defaultparams.html +++ b/PABCNetHelp/LangGuide/ProcFunc/defaultparams.html @@ -2,7 +2,7 @@ - + @@ -11,13 +11,13 @@ -

      -

      . - . - , , - . - .

      -

      :

      +

      Параметры по умолчанию

      +

      В заголовке подпрограммы можно использовать параметры по умолчанию. Для этого +достаточно после параметра поставить знак присваивания и значение. Если при вызове +не указать значение параметра по умолчанию, то будет использовано то значение, +которое указано в описании подпрограммы. Параметры по умолчанию должны +передаваться по значению и идти последними в списке параметров.

      +

      Например:

      procedure PrintTwo(a,b: integer; delim: char := ' ');
      @@ -28,8 +28,8 @@ PrintTwo(3,5);
      PrintTwo(4,2,';');

      -

      - .

      +

      Все варианты вызова подпрограммы с параметрами по умолчанию могут участвовать +в разрешении перегрузки.

      diff --git a/PABCNetHelp/LangGuide/ProcFunc/external.html b/PABCNetHelp/LangGuide/ProcFunc/external.html index 10c005f8d..4bd3b0ba5 100644 --- a/PABCNetHelp/LangGuide/ProcFunc/external.html +++ b/PABCNetHelp/LangGuide/ProcFunc/external.html @@ -11,22 +11,22 @@ -

      dll

      -

      dll -( , .NET-) - :

      +

      Вызов подпрограмм из неуправляемой dll

      +

      Для вызова подпрограммы из неуправляемой dll +(содержащей обычный, а не .NET-код) +используется конструкция вида:

      -

      external ' dll' - name ' dll'; 

      +

      заголовок функции external 'имя dll' + name 'имя функции в dll'; 

      -

      :

      +

      Например:

      function MessageBox(h: integer; m,c: string; t: integer): integer;
        external 'User32.dll' name 'MessageBox';
      ...
      - MessageBox(0,'Hello!','',0);
      + MessageBox(0,'Hello!','Сообщение',0);
       

       

      diff --git a/PABCNetHelp/LangGuide/ProcFunc/forward.html b/PABCNetHelp/LangGuide/ProcFunc/forward.html index a02ab3ad3..7ebb4ff8b 100644 --- a/PABCNetHelp/LangGuide/ProcFunc/forward.html +++ b/PABCNetHelp/LangGuide/ProcFunc/forward.html @@ -11,15 +11,15 @@ -

      -

      -, . , - ( A - B, - A). - , , - forward. -:

      +

      Опережающее объявление

      +

      В некоторых ситуациях возникает необходимость вызвать +подпрограмму, описанную далее по тексту программы. Например, такая необходимость +возникает при косвенной рекурсии (подпрограмма A +вызывает подпрограмму B, а та в свою очередь +вызывает подпрограмму A). В этом случае +используется опережающее объявление подпрограммы, состоящее из ее заголовка, за +которым следует ключевое слово forward. +Например:

       procedure B(i: integer); forward;
      @@ -35,11 +35,11 @@ procedure B(i: integer);
       end;
       
      -

      - .

      -

      forward . -, , -.

      +

      Запрещено делать опережающее объявление +для уже описанной подпрограммы.

      +

      Для методов ключевое слово forward запрещено. В нем нет +необходимости, потому что можно вызывать методы, определенные в теле класса +позднее.

      diff --git a/PABCNetHelp/LangGuide/ProcFunc/localglobal.html b/PABCNetHelp/LangGuide/ProcFunc/localglobal.html index 8bfdeb2e0..7d21792d8 100644 --- a/PABCNetHelp/LangGuide/ProcFunc/localglobal.html +++ b/PABCNetHelp/LangGuide/ProcFunc/localglobal.html @@ -8,22 +8,22 @@ -

      -

      , , - . , , - .

      -

      .

      -

      , - , - . :

      +

      Локальные и глобальные переменные

      +

      Переменные, описанные в разделе описаний подпрограммы, называются ее +локальными переменными. Переменные же, описанные вне подпрограммы, +называются глобальными по отношению к ней.

      +

      Параметры подпрограммы считаются ее локальными переменными.

      +

      Если имя локальной переменной совпадает с именем глобальной переменной, то +локальная переменная скрывает глобальную, так что к глобальной переменной нельзя +обратиться внутри подпрограммы. Например:

       var i: real;
       procedure p;
       var i: integer;
       begin
      -  //    i    
      -  i:=5; //    i; ...
      +  // к глобальной переменной i внутри процедуры нельзя обратиться
      +  i:=5; // присваивание локальной переменной i; ...
       end;
       
      diff --git a/PABCNetHelp/LangGuide/ProcFunc/namedarguments.html b/PABCNetHelp/LangGuide/ProcFunc/namedarguments.html index 32b1283a5..37d012967 100644 --- a/PABCNetHelp/LangGuide/ProcFunc/namedarguments.html +++ b/PABCNetHelp/LangGuide/ProcFunc/namedarguments.html @@ -2,7 +2,7 @@ - + @@ -11,18 +11,18 @@ -

      -

      PascalABC.NET -. , -, , - . ,

      +

      Именованные аргументы

      +

      В PascalABC.NET при вызове подпрограмм можно именовать +аргументы. Они должны обязательно идти последними в списке аргументов, иметь +имена, совпадающие с именами параметров в описании подпрограммы, и возможны +только для параметров по умолчанию. Например, при запуске программы

      procedure p(s: string; x: integer := 1; y: integer := 2; z: integer := 3);
      begin
        Print(s,x,y,z);
      end;

      begin
        p('Hello', z := 33, y := 22);
      end.

      -

      +

      будет выведено

      Hello 1 22 33

      diff --git a/PABCNetHelp/LangGuide/ProcFunc/overloading.html b/PABCNetHelp/LangGuide/ProcFunc/overloading.html index f17af31dd..8c8d293e1 100644 --- a/PABCNetHelp/LangGuide/ProcFunc/overloading.html +++ b/PABCNetHelp/LangGuide/ProcFunc/overloading.html @@ -2,7 +2,7 @@ - + @@ -11,73 +11,73 @@ -

      -

      - , -. , - - . - - .

      -

      - , - . ,

      +

      Перегрузка имен подпрограмм

      +

      В одном пространстве имен может быть определено +несколько процедур или функций с одним именем, но разным количеством или типами +параметров. Имена таких процедур и функций называются перегруженными, а их +создание - перегрузкой имен. +Разновидностью перегрузки имен является +перегрузка операций.

      +

      При вызове перегруженной процедуры или функции выбирается +та версия, у которой типы формальных параметров совпадают с типами фактических +или наиболее близки к ним. Например, если имеются описания

      procedure p(b: byte);
      begin

      end;
      procedure
      p(r: real);
      begin

      end;

      -

      p(1.0) - real ( -), p(1) - byte ( - integer - byte).

      -

      , , Object Pascal, - overload .

      -

      - , . , - , - . -,

      +

      то при вызове p(1.0) будет выбрана перегруженная +версия с параметром типа real (точное +соответствие), а при вызове p(1) будет +выбрана перегруженная версия с параметром типа byte (при +этом произойдет преобразование фактического параметра типа integer +к типу byte).

      +

      Заметим, что, в отличие от Object Pascal, использовать при +перегрузке служебное слово overload не нужно.

      +

      Если ни одна версия в текущем пространстве имен не подходит к +данному вызову, то возникает ошибка компиляции. Если две и более версии одинаково хорошо подходят к данному вызову, то +также возникает ошибка компиляции, +заключающаяся в неоднозначности выбора подпрограммы. +Например, если имеются описания

      procedure p(i: integer; r: real);
      begin

      end;
      procedure
      p(r: real; i: integer);
      begin

      end;

      -

      p(1,2) - , .

      -

      - , , - . ,

      +

      то при вызове p(1,2) оба +они одинаково подходят, что приводит к неоднозначности.

      +

      Запрещено перегружать подпрограмму другой подпрограммой с тем +же количеством и типами параметров, отличающихся лишь тем, +передается ли параметр по значению или по ссылке. Например, описания

      procedure p(i: integer);

      -

      +

      и

      procedure p(var i: integer);

      -

      .

      -

      - , .. - .

      -

      -, . - , .

      -

      - - -. , -, uses, - . , - (, , - ), , - . , - , , - , .

      -

      , - -un1 un2:

      +

      считаются одинаковыми.

      +

      Возвращаемое значение функции не участвует в +разрешении перегрузки, т.е. перегружаемые функции не могут различаться +только типами возвращаемых значений.

      +

      Алгоритм перегрузки имен при наличии нескольких подключенных +модулей, а также алгоритм перегрузки имен методов имеют особенности. Основная особенность этих +алгоритмов состоит в том, что они работают через границы пространств имен.

      +

      Поиск перегруженного +имени глобальной подпрограммы при наличии нескольких +подключенных модулей происходит во всех +модулях. При этом вначале осуществляется просмотр текущего модуля, а потом всех +модулей, подключенных в секции uses, +в порядке справа налево. Если при этом поиске находится объект, который +не может перегружать предыдущие (например, перегружается процедура, а найдено +имя переменной), то цепочка перегрузки заканчивается, и поиск наилучшей +перегруженной подпрограммы идет среди найденных до этого момента. Если в модуле, +откомпилированном позже, имеется подпрограмма с точно такими же параметрами, то +она скрывает версию из модуля, откомпилированного раньше.

      +

      Например, пусть основная программа подключает два модуля - +un1 и un2:

      main.pas

      uses un2,un1;

      @@ -108,21 +108,21 @@ end;

      end.

      -

      21, - , p - un1.

      -

      : - , -.. Object, , -, ( -). -. - ; - - Object.

      -

      - , , -. ,

      +

      В результате будет выведено 21, +что означает, что первой была вызвана процедура p +из модуля un1.

      +

      Поиск перегруженного имени метода осуществляется аналогично: +вначале осуществляется просмотр текущего класса, затем его базового класса и +т.д. до класса Object, либо до того момента, как будет встречен +объект, который не может перегружать предыдущие (имя поля или +свойства). Из всех найденных таким образом одноименных методов выбирается +наилучший. При этом в +разных классах могут быть методы с идентичными параметрами; +в этом случае вызывается первый встреченный метод от данного +класса к классу Object.

      +

      Подпрограммы с переменным числом параметров +также участвуют в перегрузке, однако, обычные подпрограммы имеют над ними +приоритет. Например, в ситуации

      procedure p(i: integer);
      begin
      @@ -137,7 +137,7 @@   p(1) 
      end.

      -

      .
      +

      будет вызвана первая процедура.
       

      diff --git a/PABCNetHelp/LangGuide/ProcFunc/params.html b/PABCNetHelp/LangGuide/ProcFunc/params.html index cd16b4199..7912c0d5c 100644 --- a/PABCNetHelp/LangGuide/ProcFunc/params.html +++ b/PABCNetHelp/LangGuide/ProcFunc/params.html @@ -4,10 +4,10 @@ - - - - + + + + @@ -16,57 +16,57 @@ -

      -

      , -, . , -, .

      -

      - -var const, - , - . - var const, - - , - -. PascalABC.NET - - .

      -

      , - - . - - - .

      -

      , :

      +

      Параметры процедур и функций

      +

      Параметры, указываемые при описании +подпрограммы, называются формальными. Параметры, указываемые при вызове +подпрограммы, называются фактическими.

      +

      Если формальный параметр описан с +предваряющим ключевым словом +var или const, то его называют параметром-переменной и говорят, что +он передается по ссылке. Если же +параметр описан без слов var или const, +то его называют параметром-значением и говорят, что он передается +по +значению. Слово ссылка используется в PascalABC.NET также в +другом значении - для ссылочных типов.

      +

      Если параметр передается по значению, то при вызове +подпрограммы значения фактических параметров присваиваются соответствующим +формальным параметрам. Типы фактических параметров-значений должны быть +совместимы по присваиванию с типами +соответствующих формальных параметров.

      +

      Например, пусть имеется следующее описание процедуры:

      procedure PrintSquare(i: integer);
      begin
        writeln(i*i);
      end;
      - PrintSquare(5*a-b) 5*a-b i, - .

      , - - . -- - . - -, - .

      -

      ,

      +Тогда при вызове PrintSquare(5*a-b) значение 5*a-b будет вычислено и присвоено переменной i, после чего +выполнится тело процедуры.

      Если параметр передается по ссылке, то при вызове +подпрограммы фактический параметр заменяет собой в теле процедуры +соответствующий ему формальный параметр. В итоге любые изменения формального +параметра-переменной внутри процедуры приводят к соответствующим изменениям +фактического параметра. Фактические параметры-переменные должны быть +переменными, а их типы должны быть +эквивалентны типам соответствующих формальных параметров.

      +

      Например, если описана процедура

      procedure Mult2(var a: integer);
      begin
        a := a*2;
      end;
      - Mult2(d) d 2 .

      - - , - .  - - , - . 

      -

      -. (, , ), - . -, , . - , -var, - const:

      -

      :

      +то после вызова Mult2(d) значение d увеличится в 2 раза.

      В качестве фактического параметра-значения можно указывать +любое выражение, тип которого совпадает с типом формального параметра или неявно +к нему приводится.  В качестве фактического параметра-переменной можно +указывать только переменную, тип которой в точности совпадает с типом +формального параметра. 

      +

      При передаче параметра по ссылке в подпрограмму передается адрес фактического +параметра. Поэтому если параметр занимает много памяти (массив, запись, строка), то +обычно он также передается по ссылке. В результате в процедуру передается не сам +параметр, а его адрес, что экономит память и время работы. При этом если +параметр меняется внутри подпрограммы, то он передается с ключевым словом +var, если не меняется - с ключевым словом const:

      +

      Например:

      type
        Person = record
      @@ -81,12 +81,12 @@   Inc(p.age);
      end;

      -

      - .

      -

      , - - - . , -

      +

      Отметим особенности передачи динамических массивов в +качестве параметров подпрограмм.

      +

      Поскольку динамический массив является ссылкой, то при +изменении формального параметра-динамического массива внутри подпрограммы +меняется соответствующий фактический параметр. Например, +в результате работы программы

      procedure p(a: array of integer);
      begin
      @@ -98,9 +98,9 @@   writeln(b[1]);
      end.

      -

      2. - - :

      +

      будет выведено 2. Передавать динамические массивы по ссылке +имеет смысл только в случае если память под динамический массив +перераспределяется внутри подпрограммы:

      procedure q(var a: array of integer);
      begin
      diff --git a/PABCNetHelp/LangGuide/ProcFunc/procdef.html b/PABCNetHelp/LangGuide/ProcFunc/procdef.html index 85d6477e6..1bfbc0baf 100644 --- a/PABCNetHelp/LangGuide/ProcFunc/procdef.html +++ b/PABCNetHelp/LangGuide/ProcFunc/procdef.html @@ -5,9 +5,9 @@ - - - + + + @@ -16,73 +16,73 @@ -

      :

      -

      -

      -, , - . , , - , - . -.

      -

      -

      - .

      -

      :

      +

      Процедуры и функции: обзор

      +

      Что такое процедуры и функции

      +

      Процедура или функция представляет собой последовательность +операторов, которая имеет имя, список параметров и может быть вызвана из +различных частей программы. Функции, в отличие от процедур, в результате своего +выполнения возвращают значение, которое может быть использовано +в выражении. Для единообразия функции и процедуры называются +подпрограммами.

      +

      Описание процедур и функций

      +

      Любая используемая в программе процедура или функция должна быть +предварительно описана в разделе описаний.

      +

      Описание процедуры имеет вид:

      -

      procedure ( - );
      -

      +

      procedure имя(список + формальных параметров);
      +
      раздел описаний
      begin
      -  

      +  
      операторы
      end;

      -

      :

      +

      Описание функции имеет вид:

      -

      function ( - ): - ;
      -

      +

      function имя(список + формальных параметров): + тип возвращаемого значения;
      +
      раздел описаний
      begin
      -  

      +  
      операторы
      end;

      -

      , - begin/end, - .

      -

      - . -, ";". - , , - . - var const, , - (.. ). - , , - , ( - ).

      -

      - , -. +

      Операторы подпрограммы, окаймленные +операторными скобками begin/end, +называются телом этой подпрограммы.

      +

      Список формальных параметров вместе с +окружающими скобками может отсутствовать. Он состоит из одной или нескольких +секций, разделенных символом ";". +Каждая секция состоит из списка переменных, перечисляемых через запятую, после +которого следуют двоеточие и тип. Каждая секция может предваряться ключевым +словом var или const, что указывает на то, что параметры +передаются по ссылке (см.п. Параметры процедур и функций). +Тип формального параметра должен быть либо именем, либо динамическим массивом, +либо множеством, либо процедурной переменной (для последних трех типов имеет +место структурная эквивалентность типов).

      +

      Раздел описаний процедуры +или функции устроен так же, как и раздел описаний основной +программы. Здесь описываются так называемые - , ( - - ) - - . - .

      -

      -. , - : -.

      -

      :

      +локальные переменные и константы, типы (за исключением классов - классы +можно описывать только глобально) +а также +вложенные процедуры и функции. Все такие локальные объекты доступны лишь внутри +данной подпрограммы и не видны извне.

      +

      В разделе описаний подпрограммы можно описывать другие +подпрограммы. Исключение составляют методы класса, описываемые непосредственно в +теле класса: в них нельзя описывать вложенные подпрограммы ввиду синтаксической +неоднозначности.

      +

      Например:

      procedure DoAdd(a,b: real; var res: real);
      begin
        res := a + b;
      end;

      -

      -

      . - - :

      +

      Вызов подпрограммы

      +

      Подпрограмма один раз описывается и может быть многократно вызвана. Для +вызова процедуры используется оператор +вызова процедуры:

      begin
      @@ -91,12 +91,12 @@ Print(res); 
        DoAdd(2*x,y,res);
        Print(res); 
      end;

      -

        - .

      -

      Result

      -

      Result, - . - . :

      +

       Для вызова функции используется +выражение вызова функции.

      +

      Переменная Result

      +

      Внутри тела любой функции определена специальная переменная с именем Result, +которая хранит результат вычисления функции. Ее тип совпадает с типом +возвращаемого значения функции. Например:

      function Sum(a,b: real): real;
      begin
      @@ -115,19 +115,19 @@

      begin
        var a := Seq(1,5,3);
        writeln(MinElement(a) + Sum(2,3));
      end.

      -

      Result -, .

      -

      -

      PascalABC.NET - :

      +

      Если внутри функции не присвоить переменной Result некоторое +значение, то функция вернет в результате своего вызова непредсказуемое значение.

      +

      Упрощенный синтаксис описания подпрограмм

      +

      В PascalABC.NET имеется упрощенный синтаксис +описания однооператорных процедур:

      procedure WriteStar := Write('*');

      -

      , :

      +

      Аналогичный синтаксис имеется для функций, вычисляющих одно выражение:

      function Add(a,b: real): real := a + b;

      -

      :

      +

      При этом в ряде случаев для возвращаемого значения функции возможен автовывод типов:

      function Add(a,b: real) := a + b;

      diff --git a/PABCNetHelp/LangGuide/ProcFunc/shortfundef.html b/PABCNetHelp/LangGuide/ProcFunc/shortfundef.html index 8a969549f..b9a8fafda 100644 --- a/PABCNetHelp/LangGuide/ProcFunc/shortfundef.html +++ b/PABCNetHelp/LangGuide/ProcFunc/shortfundef.html @@ -2,7 +2,7 @@ - + @@ -11,17 +11,17 @@ -

      -

      PascalABC.NET - :

      +

      Упрощенный синтаксис описания подпрограмм

      +

      В PascalABC.NET имеется упрощенный синтаксис +описания однооператорных процедур:

      procedure WriteStar := Write('*');

      -

      , :

      +

      Аналогичный синтаксис имеется для функций, вычисляющих одно выражение:

      function Add(a,b: real): real := a + b;

      -

      :

      +

      При этом в ряде случаев для возвращаемого значения функции возможен автовывод типов:

      function Add(a,b: real) := a + b;

      diff --git a/PABCNetHelp/LangGuide/ProcFunc/variableparams.html b/PABCNetHelp/LangGuide/ProcFunc/variableparams.html index c215bffa6..f4bedb0d8 100644 --- a/PABCNetHelp/LangGuide/ProcFunc/variableparams.html +++ b/PABCNetHelp/LangGuide/ProcFunc/variableparams.html @@ -11,10 +11,10 @@ -

      -

      , , - params, - . :

      +

      Переменное число параметров

      +

      Для указания того, что подпрограмма должна иметь переменное число параметров, +используется ключевое слово params, за которым следует +описание динамического массива. Например:

      function Sum(params a: array of integer): integer;
      @@ -30,17 +30,17 @@
      end;
      -

      - params - - , :

      +

      При вызове +подпрограммы на месте формального параметра params +может быть любое ненулевое количество фактических +параметров совместимого типа, перечисляемых через запятую:

      var s: integer := Sum(1,2,3,4,5);
      s := s + Sum(6,7);

      - params - , , - . params . +В списке параметров ключевое слово params +может указываться только для последнего параметра, причем, этот параметр не +должен быть параметром по умолчанию. Параметры params всегда передаются только по значению. diff --git a/PABCNetHelp/LangGuide/Types/arrays.html b/PABCNetHelp/LangGuide/Types/arrays.html index f658dea2e..506364485 100644 --- a/PABCNetHelp/LangGuide/Types/arrays.html +++ b/PABCNetHelp/LangGuide/Types/arrays.html @@ -9,15 +9,15 @@ -

      -

      , - , ( -, ).

      -

      PascalABC.NET - -.

      -

      PascalABC.NET - .

      +

      Массивы

      +

      Массив представляет собой набор элементов одного типа, каждый +из которых имеет свой номер, называемый индексом (индексов может быть +несколько, тогда массив называется многомерным).

      +

      Массивы в PascalABC.NET +делятся на статические и +динамические.

      +

      При выходе за границы изменения индекса в PascalABC.NET +всегда генерируется исключение.

      diff --git a/PABCNetHelp/LangGuide/Types/boolean.html b/PABCNetHelp/LangGuide/Types/boolean.html index ae80de3d3..2e9886f4e 100644 --- a/PABCNetHelp/LangGuide/Types/boolean.html +++ b/PABCNetHelp/LangGuide/Types/boolean.html @@ -12,28 +12,28 @@ -

      -

      -boolean 1 , - True () - False ().

      -

      :

      +

      Логический тип

      +

      Значения логического типа +boolean занимают 1 байт и принимают одно из двух значений, задаваемых предопределенными +константами True (истина) +и False (ложь).

      +

      Для логического типа определены статические методы:

      boolean.Parse(s) - - , - boolean. , - ; 

      + функция, конвертирующая строковое представление числа в значение типа + boolean. Если преобразование невозможно, то + генерируется исключение; 

      boolean.TryParse(s,res) - - , - boolean - res. , - True, - + функция, конвертирующая строковое представление числа в значение типа + boolean и записывающая его в переменную + res. Если преобразование возможно, то возвращается + значение True, в противном случае - False.

      -

      , - ToString, - boolean.

      -

      . , +

      Кроме этого, определена экземплярная +функция ToString, возвращающая строковое +представление переменной типа boolean.

      +

      Логический тип является порядковым. В частности, False<True, Ord(False)=0, Ord(True)=1.

       

      diff --git a/PABCNetHelp/LangGuide/Types/char.html b/PABCNetHelp/LangGuide/Types/char.html index 637b3f81b..006e52e7a 100644 --- a/PABCNetHelp/LangGuide/Types/char.html +++ b/PABCNetHelp/LangGuide/Types/char.html @@ -20,56 +20,56 @@ -

      -

      char - 2 Unicode-. - System.Char - .NET.

      -

      + - () . : 'a'+'b' -= 'ab'. , , - :

      +

      Символьный тип

      +

      Символьный тип char +занимает 2 байта и хранит Unicode-символ. Символы реализуются +типом System.Char +платформы .NET.

      +

      Операция + для символов означает +конкатенацию (слияние) строк. Например: 'a'+'b' += 'ab'. Как и для строк, если к символу прибавить число, то число +предварительно преобразуется к строковому представлению:

      var s: string := ' '+15; // s = ' 15'
      var s1: string := 15+' '; // s = '15 '

      -

        < > <= ->= = <>, :

      +

      Над символами определены операции сравнения  < > <= +>= = <>, которые сравнивают коды символов:

      'a'<'b' // True
      '2'<'3' // True

      -

      Unicode - -Chr Ord:

      +

      Для преобразования между символами и их кодами в кодировке Unicode используются +стандартные функции +Chr и Ord:

      -

      Chr(n) - , +

      Chr(n) - функция, возвращающая символ с кодом n - Unicode;
      - Ord()
      - , word, - c - Unicode.

      + в кодировке Unicode;
      + Ord(с)
      - функция, возвращающая значение типа word, + представляющее собой код символа c + в кодировке Unicode.

      -

      Windows - -ChrAnsi OrdAnsi:

      +

      Для преобразования между символами и их кодами в кодировке Windows используются +стандартные функции +ChrAnsi и OrdAnsi:

      -

      ChrAnsi(w) - +

      ChrAnsi(w) - возвращает символ с кодом w - Windows;
      - OrdAnsi()
      - byte, - +в кодировке Windows;
      + OrdAnsi(с)
      - возвращает значение типа byte, представляющее + собой код символа c - Windows.

      + в кодировке Windows.

      -

      , # -Unicode- ( - 0 65535).

      -

      :

      +

      Кроме того, выражение #число возвращает +Unicode-символ с кодом число (число должно +находиться в диапазоне от 0 до 65535).

      +

      Аналогичную роль играют явные преобразования типов:

      -

      char(w) w - Unicode;
      - word()
      +

      char(w) возвращает символ с кодом w + в кодировке Unicode;
      + word(с)
      возвращает код символа c - Unicode.

      + в кодировке Unicode.

      -

      .

      -

      char.

      +

      Стандартные подпрограммы работы с символами.

      +

      Статические методы типа char.

      diff --git a/PABCNetHelp/LangGuide/Types/charmembers.html b/PABCNetHelp/LangGuide/Types/charmembers.html index e32da7333..3e87c4876 100644 --- a/PABCNetHelp/LangGuide/Types/charmembers.html +++ b/PABCNetHelp/LangGuide/Types/charmembers.html @@ -10,50 +10,50 @@ -

      char

      -

      char -PascalABC.NET .

      -

      char

      +

      Методы типа char

      +

      Тип char в +PascalABC.NET содержит ряд методов.

      +

      Статические методы класса char

      - - + + - + - + - + - + - + - + - + - + - +
      МетодОписание
      char.IsDigit(c: char): boolean, Возвращает, является ли символ цифрой
      char.IsLetter(c: char): boolean, Возвращает, является ли символ буквой
      char.IsWhiteSpace(c: char): boolean, Возвращает, является ли символ пробельным
      char.IsUpper(c: char): boolean, Возвращает, является ли символ буквой в верхнем регистре
      char.IsLower(c: char): boolean, Возвращает, является ли символ буквой в нижнем регистре
      char.IsPunctuation(c: char): boolean, Возвращает, является ли символ знаком препинания
      char.IsLetterOrDigit(c: char): boolean, Возвращает, является ли символ буквой или цифрой
      char.ToLower(c: char): char , Возвращает символ, преобразованный к нижнему регистру
      char.ToUpper(c: char): char , Возвращает символ, преобразованный к верхему регистру
      diff --git a/PABCNetHelp/LangGuide/Types/dynamicarrays.html b/PABCNetHelp/LangGuide/Types/dynamicarrays.html index c0ba767e1..a1d57abd9 100644 --- a/PABCNetHelp/LangGuide/Types/dynamicarrays.html +++ b/PABCNetHelp/LangGuide/Types/dynamicarrays.html @@ -16,22 +16,22 @@ -

      -

      -

      :

      +

      Динамические массивы

      +

      Описание динамического массива

      +

      Тип динамического массива конструируется следующим образом:

      -

      array of  ( - )
      - array [,] of   - ( )
      - ..

      +

      array of тип элементов  (одномерный + массив)
      + array [,] of тип элементов  + (двумерный массив)
      + и т.д.

      -

      . - ( ). +

      Переменная типа динамический массив представляет собой ссылку. Поэтому +динамический массив нуждается в инициализации (выделении памяти под элементы).

      -

      -

      . - new :

      +

      Выделение памяти под динамический массив

      +

      Для выделения памяти под динамический массив используется два способа. Первый +способ использует операцию new в стиле вызова конструктора класса:

      var
        a: array of integer;
      @@ -42,34 +42,34 @@ b := new real[4,3];
      end.

      -

      , - :

      +

      Данный способ хорош тем, что позволяет совместить описание массива и +выделение под него памяти:

      var
        a: array of integer := new integer[5];
        b: array [,] of real := new real[4,3];

      -

      - :

      +

      Описание типа можно при этом опускать - тип автовыводится:

      var
        a := new integer[5];
        b := new real[4,3];

      -

      SetLength:

      +

      Второй способ выделения памяти под динамический массив использует стандартную процедуру SetLength:

      SetLength(a,10);
      SetLength(b,5,3);

      -

      .

      -

      SetLength , - .

      -

      -

      - new:

      +

      Элементы массива при этом заполняются значениями по умолчанию.

      +

      Процедура SetLength обладает тем преимуществом, что при ее +повторном вызове старое содержимое массива сохраняется.

      +

      Инициализация динамического массива

      +

      Можно инициализировать динамический массив при выделении под него память +операцией new:

      a := new integer[3](1,2,3);
      b := new real[4,3] ((1,2,3),(4,5,6),(7,8,9),(0,1,2));

      -

      - :

      +

      Инициализацию динамического массива в момент описания можно проводить в +сокращенной форме:

      var
        a: array of integer := (1,2,3);
      @@ -78,120 +78,120 @@   c: array of array of integer := ((1,2,3),(4,5),(6,7,8));

      -

      -.

      -

      - Seq..., - :

      +

      При этом происходит выделение памяти под указанное справа количество +элементов.

      +

      Инициализация одномерного массива проще всего осуществляется стандартными +функциями Seq..., которые выделяют память нужного размера и заполняют массив +указанными значениями:

      var a := Arr(1,3,5,7,8);                   // array of integer
      var s := - Arr('','',''); // array of string
      var + Arr('Иванов','Петров','Сидоров'); // array of string
      var b := ArrFill(777,5);                   // b = [777,777,777,777,777]
      var r := ArrRandom(10);                    - // 10 0 99 

      + // заполнение 10 случайными целыми в диапазоне от 0 до 99 

      -

      :

      +

      В таком же стиле можно инициализировать массивы массивов:

      var a := Arr(Arr(1,3,5),Arr(7,8),Arr(5,6)); // array of array of integer

      -

      -

      (n- - ). ( ) -Length Length:

      +

      Длина динамического массива

      +

      Динамический массив помнит свою длину (n-мерный динамический массив помнит +длину по каждой размерности). Длина массива (количество элементов в нем) возвращается стандартной функцией +Length или свойством Length:

      l := Length(a);
      l := a.Length;

      -

      - Length GetLength(i):

      +

      Для многомерных массивов длина по каждой размерности возвращается стандартной +функцией Length с двумя параметрами или методом GetLength(i):

      l := Length(a,0);
      l := a.GetLength(0); 

      -

      -

      - :

      +

      Ввод динамического массива

      +

      После выделения памяти ввод динамического массива можно осуществлять +традиционно в цикле:

      for var i:=0 to a.Length-1 do
        read(a[i]);
      -

      - ReadArrInteger:

      +

      Ввод динамического массива можно осуществлять +с помощью стандартной функции ReadArrInteger:

      var a := ReadArrInteger(10);
      -

      .

      -

      -

      write , - :

      +

      При этом под динамический массив выделяется память нужного размера.

      +

      Вывод динамического массива

      +

      Процедура write выводит динамический массив, заключая элементы в квадратные +скобки и разделяя их запятыми:

      var a := Arr(1,3,5,7,9);
      writeln(a); // [1,3,5,7,9]
                   
      -

      n- , - :.

      +

      n-мерный динамический массив выводится так, что каждая размерность +заключается в квадратные скобки:.

      var m := new integer[3,3] ((1,2,3),(4,5,6),(7,8,9));
      writeln(m); // [[1,2,3],[4,5,6],[7,8,9]]
      -

      Print +

      Динамический массив можно выводить также методом расширения Print или Println:

      a.Println;

      -

      , , - Print, . :

      +

      При этом элементы по умолчанию разделяются пробелами, но можно это изменить, +задав параметр Print, являющийся разделителем элементов. Например:

      a.Print(NewLine);

      -

      .

      -

      -

      +

      выводит каждый элемент на отдельной строке.

      +

      Массивы массивов

      +

      Если объявлен массив массивов

      -

      var : array of array of +

      var с: array of array of integer;

      -

      +

      то его инициализацию можно провести только с помощью SetLength:

      -

      SetLength(,5);
      +

      SetLength(с,5);
      for i := 0 to 4 do
        SetLength(c[i],3);

      -

      new - array of integer:

      +

      Для инициализации такого массива с помощью new +следует ввести имя типа для array of integer:

      type IntArray = array of integer;
      - var
      : array of IntArray;
      + var
      с: array of IntArray;
      ...
      c := new IntArray[5];
      for i := 0 to 4 do
        c[i] := new integer[3];

      -

      - :

      +

      Инициализацию массива массивов можно также проводить в +сокращенной форме:

      var
        c: array of array of integer := ((1,2,3),(4,5),(6,7,8));

      -

      -

      , -- :

      +

      Присваивание динамических массивов

      +

      Динамические массивы одного типа можно присваивать друг другу, при этом обе +переменные-ссылки будут указывать на одну память:

      var a1: array of integer;
      var a2: array of integer;
      a1 := a2;

      -

      , - : - - , .

      -

      , - Copy:

      +

      Следует обратить внимание, что для динамических массивов принята +структурная эквивалентность типов: можно +присваивать друг другу и передавать в качестве параметров подпрограмм +динамические массивы, совпадающие по структуре.

      +

      Чтобы одному динамическому массиву присвоить копию другого массива, следует +воспользоваться стандартной функцией Copy:

      a1 := Copy(a2);

      -

      -

      , .. - :

      +

      Передача динамического массива в подпрограмму

      +

      Динамический массив обычно передается в подпрограмму по значению, т.к. сама +переменная уже является ссылкой:

      procedure Squares(a: array of integer);
      begin
        for var i:=0 @@ -200,9 +200,9 @@ Println:

      var a := Arr(1,3,5,7,9);
        Squares(a);
      end.

      -

      : - . , - SetLength:

      +

      Динамический массив передается по ссылке только в одном случае: если он +создается или пересоздается внутри подпрограммы. В частности, это необходимо +делать если для динамического масива внутри подпрограммы вызывается SetLength:

      procedure Add(var a: array of integer; x: integer);
      begin
        @@ -210,14 +210,14 @@ Println:


      begin
        var a := Arr(1,3,5,7,9);
        Add(a,666);
        writeln(a);
      end.

      -

      +

      Подпрограммы для работы с динамическими массивами

      -

      -

      -

      +Подпрограммы для генерации динамических массивов

      +

      Методы +расширения для последовательностей

      - -

      +Методы расширения +для динамических массивов

      diff --git a/PABCNetHelp/LangGuide/Types/enum_subrange.html b/PABCNetHelp/LangGuide/Types/enum_subrange.html index 74600965c..99f79f281 100644 --- a/PABCNetHelp/LangGuide/Types/enum_subrange.html +++ b/PABCNetHelp/LangGuide/Types/enum_subrange.html @@ -14,40 +14,40 @@ -

      -

      .

      +

      Перечислимый и диапазонный типы

      +

      Перечислимый тип определяется упорядоченным набором идентификаторов.

      type typeName = (value1, value2, ..., valuen);

      -

      4 . value - typeName, - .

      -

      :

      +

      Значения перечислимого типа занимают 4 байта. Каждое значение value +представляет собой константу типа typeName, попадающую в текущее +пространство имен.

      +

      Например:

      type
       
      Season = (Winter,Spring,Summer,Autumn);
        DayOfWeek = (Mon,Tue,Wed,Thi,Thr,Sat,Sun);

      -

      , - typeName.value, - , :

      +

      К константе перечислимого типа можно обращаться непосредственно по имени, а +можно использовать запись typeName.value, в которой имя константы +уточняется именем перечислимого типа, к которому она принадлежит:

      var a: DayOfWeek;
      a := Mon;
      a := DayOfWeek.Wed;

      -

      <:

      +

      Значения перечислимого типа можно сравнивать на <:

      DayOfWeek.Wed < DayOfWeek.Sat

      -

      Ord, -Pred Succ, Inc -Dec. Ord - , -.

      -

      - ToString, - . write .

      -

      :

      +

      Для значений перечислимого типа можно использовать функции Ord, +Pred и Succ, а также процедуры Inc и +Dec. Функция Ord возвращает порядковый номер значения в списке +констант соответствующего перечислимого типа, нумерация при этом начинается с +нуля.

      +

      Для перечислимого типа определена экземплярная +функция ToString, возвращающая строковое представление переменной +перечислимого типа. При выводе значения перечислимого типа с помощью процедуры write также выводится строковое представление значения перечислимого типа.

      +

      Например:

      type Season = (Winter,Spring,Summer,Autumn);
      var s: Season;
      @@ -57,19 +57,19 @@   writeln(s); // Summer 
      end.

      -

      , - a..b, a -- , b - - , a<b:

      +

      Диапазонный тип представляет собой подмножество значений целого, символьного +или перечислимого типа и описывается в виде a..b, где a +- нижняя, b - верхняя граница +интервального типа, a<b:

      var
       
      intI: 0..10;
        intC: 'a'..'z';
        intE: Mon..Thr; 

      -

      , , - . - , .

      +

      Тип, на основе которого строится диапазонный тип, называется базовым +для этого диапазонного типа. Значения диапазонного типа занимают в памяти +столько же, сколько и значения соответствующего базового типа.

      diff --git a/PABCNetHelp/LangGuide/Types/equiv2.html b/PABCNetHelp/LangGuide/Types/equiv2.html index 651f3336e..233e66d4f 100644 --- a/PABCNetHelp/LangGuide/Types/equiv2.html +++ b/PABCNetHelp/LangGuide/Types/equiv2.html @@ -7,20 +7,20 @@ -

      // !!!

      -

      Pascal ABC - (), . ,

      +

      Эквивалентность типов // старое!!!

      +

      В Pascal ABC два типа считаются +эквивалентными (равными), если совпадают их описания. Например, после описаний

      type Arr=array [1..100] of integer;
      var

        a: Arr;
        b: array [1..100] of integer;

      -

      :

      +

      можно присваивать массивы друг другу:

      a:=b;

      -

      , , :

      +

      В типах записей, помимо типов полей, должны совпадать имена:

      type
        rec1 = record i,j: integer end;
      @@ -28,10 +28,10 @@ ...
      var r1: rec1; r2: rec2;
      ...
      - r1:=r2; // !

      + r1:=r2; // ошибка!

      -

      - :

      +

      В типах формальных параметров процедур и функций имена могут +не совпадать:

      type
        proc1 = procedure (i: integer); 
      @@ -39,12 +39,12 @@ ...
      var p1: proc1; p2: proc2;
      ...
      - p1:=p2; //

      + p1:=p2; // все в порядке

      -

      ( - Borland Pascal Borland Delphi) - (, , ) - , :

      +

      Подобная расширенная трактовка эквивалентности (по сравнению +с Borland Pascal и Borland Delphi) позволяет передавать параметры +составного типа (массивы, записи, процедурный и указательный) в +процедуры и функции, не определяя для этих параметров новый тип:

      procedure foreach(var a: array [1..100] of real; n: integer; f: function(r: real): real);
      var i: integer;
      diff --git a/PABCNetHelp/LangGuide/Types/files.html b/PABCNetHelp/LangGuide/Types/files.html index 51769e40f..4ca13fecd 100644 --- a/PABCNetHelp/LangGuide/Types/files.html +++ b/PABCNetHelp/LangGuide/Types/files.html @@ -12,55 +12,55 @@ -

      -

      - , . -PascalABC.NET - - . , - #13#10 (Windows) - #10 (Linux). - NewLine. - -.

      -

      - text, -file, - file of - :

      +

      Файловые типы

      +

      Файл представляет +собой последовательность элементов одного типа, хранящихся на диске. В +PascalABC.NET имеется два типа файлов - двоичныетекстовые. Текстовые файлы хранят символы, разделенные на строки +символами #13#10 (Windows) и +символом #10 (Linux). Последовательность символов для перехода на новую строку +хранится в константе NewLine. +Двоичные файлы в свою очередь делятся на типизированные и +бестиповые.

      +

      Для описания текстового файла используется стандартное имя +типа text, бестиповые файлы имеют тип +file, а для описания типизированного +файла используется конструкция file of +тип элементов:

      var
        f1: file of real;
        f2: text;
        f3: file;

      -

      - , , , - .

      -

      +

      В качества типа элементов в типизированном файле не могут +фигурировать указатели, ссылочные типы, а также тип записи, содержащий ссылочные +поля или указатели.

      +

      Стандартные файловые процедуры и функции описываются в пунктах

      -

      , .NET -, . -System.Text System.IO.

      +

      Кроме того, в .NET имеется ряд +классов, связанных с работой с файлами. Они находятся в пространствах имен +System.Text и System.IO.

      diff --git a/PABCNetHelp/LangGuide/Types/index_types.html b/PABCNetHelp/LangGuide/Types/index_types.html index 4a3f99712..3e2d9002f 100644 --- a/PABCNetHelp/LangGuide/Types/index_types.html +++ b/PABCNetHelp/LangGuide/Types/index_types.html @@ -2,8 +2,8 @@ - - + + @@ -19,49 +19,49 @@ -

      -

      -PascalABC.NET , -, , - -.

      -

      - - , -, , - .

      -

      , - .

      -

      - -, -, , -, -, -.

      -

      , - - -.

      -

      , , -. - for. - , Ord, -Pred Succ, - Inc Dec.

      -

      , - , Object. - -PascalABC.NET  .NET. - void*.

      -

      PascalABC.NET -, . - .

      -

      , PascalABC.NET , Delphi -Object Pascal, . - , -, -. - , - .

      +

      Обзор типов

      +

      Типы в +PascalABC.NET подразделяются на простые, +структурированные, типы указателей, +процедурные типы и +последовательности.

      +

      К простым относятся целые +и +вещественные типы, +логический, символьный, +перечислимый и диапазонный тип.

      +

      Тип данных называется структурированным, +если в одной переменной этого типа может содержаться множество значений.

      +

      К структурированным типам +относятся +массивы, +строки, записи, +кортежи, +множества, файлы и +классы.

      +

      Особым типом данных является последовательность, +которая хранит по-существу алгоритм получения данных последовательности один за +другим.

      +

      Все простые типы, кроме вещественного, называются +порядковыми. +Только значения этих типов могут быть индексами статических массивов и параметрами цикла for. +Кроме того, для порядковых типов используются функции Ord, +Pred и Succ, +а также процедуры Inc и Dec.

      +

      Все типы, +кроме типов указателей, являются производными от типа Object. +Каждый тип в +PascalABC.NET имеет отображение на тип .NET. Тип +указателя принадлежит к неуправляемому коду и моделируется типом void*.

      +

      Большинство типов в PascalABC.NET подразделяются на +размерные, ссылочные и типы указателей. Сравнение размерных и ссылочных типов +дано здесь.

      +

      Кроме того, в PascalABC.NET имеется несколько типов, унаследованных от Delphi +Object Pascal, которые трудно отнести к размерному или ссылочному типу. Это +статические массивы, +множества, размерные строки и +файлы. По представлению в памяти они относятся к +ссылочному типу, но по поведению - к размерному.

      \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Types/integer.html b/PABCNetHelp/LangGuide/Types/integer.html index 5f500b70d..6f84733bd 100644 --- a/PABCNetHelp/LangGuide/Types/integer.html +++ b/PABCNetHelp/LangGuide/Types/integer.html @@ -33,15 +33,15 @@ -

      -

      , - .

      +

      Целые типы

      +

      Ниже приводится таблица целых типов, содержащая также их +размер и диапазон допустимых значений.

       

      - - - + + + @@ -85,15 +85,15 @@ - - + +
      , ТипРазмер, байтДиапазон значений
      shortint
      BigIntegerпеременныйнеограниченный
      -

      integer longint, - longword cardinal - .

      -

      - : +

      Типы integer и longint, а +также longword и cardinal +являются синонимами.

      +

      Максимальные значения для каждого целого типа определены как внешние +стандартные константы: MaxInt64, @@ -108,34 +108,34 @@ MaxWord, MaxByte.

      -

      T - BigInteger - :

      +

      Для каждого целого типа T +кроме BigInteger +определены следующие константы как статические члены:

      -

      T.MinValue - , - T;

      -

      T.MaxValue - , - T;

      +

      T.MinValue - константа, представляющая + минимальное значение типа T;

      +

      T.MaxValue - константа, представляющая + максимальное значение типа T;

      -

      T - :

      +

      Для каждого целого типа T +определены статические функции:

      -

      T.Parse(s) - , - T. - , ;  +

      T.Parse(s) - функция, конвертирующая + строковое представление числа в значение типа T. + Если преобразование невозможно, то генерируется исключение; 

      -

      T.TryParse(s,res) - , - T - res. - , True, - - False.

      +

      T.TryParse(s,res) - функция, конвертирующая + строковое представление числа в значение типа T + и записывающая его в переменную res. + Если преобразование возможно, то возвращается значение True, + в противном случае - False.

      -

      , T - ToString, - .

      -

      , - , - $:

      +

      Кроме того, для T определена экземплярная +функция ToString, возвращающая строковое +представление переменной данного типа.

      +

      Константы целого типа могут представляться как в десятичной, +так и в шестнадцатеричной форме, перед шестнадцатеричной константой ставится +знак $:

      25   3456   $FFFF

      diff --git a/PABCNetHelp/LangGuide/Types/pointers.html b/PABCNetHelp/LangGuide/Types/pointers.html index 00092bf52..8ad13f3e0 100644 --- a/PABCNetHelp/LangGuide/Types/pointers.html +++ b/PABCNetHelp/LangGuide/Types/pointers.html @@ -2,8 +2,8 @@ - - + + @@ -13,30 +13,30 @@ -

      -

      - , . -PascalABC.NET - ( ) - ( -, - ).

      -

      T ^T, :

      +

      Указатели

      +

      Указатель - это ячейка памяти, хранящая адрес. В +PascalABC.NET указатели делятся на +типизированные (содержат адрес ячейки памяти данного типа) и +бестиповые (содержат адрес оперативной +памяти, не связанный с данными какого-либо определенного типа).

      +

      Тип указателя на тип T имеет форму ^T, например:

      type pinteger = ^integer;
      var p: ^record r,i: real end;

      -

      pointer.

      -

      , , - ^:

      +

      Бестиповой указатель описывается с помощью слова pointer.

      +

      Для доступа к ячейке памяти, адрес которой хранит типизированный указатель, +используется операция разыменования ^:

      var
        i: integer;
        pi: ^integer;
      ...
      - pi := @i; // i
      - pi^ := 5; // i 5

      + pi := @i; // указателю присвоили адрес переменной i
      + pi^ := 5; // переменной i присвоили 5

      -

      .

      -

      :

      +

      Операция разыменования не может быть применена к бестиповому указателю.

      +

      Типизированный указатель может быть неявно преобразован к бестиповому:

      var
        p: pointer;
      @@ -44,25 +44,25 @@ PascalABC.NET
      ...
      p := pr;

      -

      :

      +

      Обратное преобразование также может быть выполнено неявно:

      pr := p;
      pr^ := 3.14;

      -

      (=) (<>). , , - nil ( ) : +

      Указатели можно сравнивать на равенство (=) и неравенство (<>). Для того чтобы отметить тот факт, что указатель никуда не указывает, +используется стандартная константа nil (нулевой указатель) : p := nil.

      -

      ! -.NET T - - - (, , - ). - : , - . , , - , - . -, . , -, .

      +

      Внимание! Ввиду особенностей платформы +.NET тип T +типизированного указателя не должен быть ссылочным или содержать ссылочные типы +на каком-то уровне (например, запрещены указатели на записи, у которых одно из +полей имеет ссылочный тип). Причина +такого ограничения проста: указатели реализуются неуправляемым кодом, который не +управляется сборщиком мусора. Если в памяти, на которую указывает указатель, +содержатся ссылки на управляемые переменные, то они становятся недействительными +после очередной сборки мусора. Исключение составляют динамические массивы и +строки, обрабатываемые особым образом. То есть, можно делать указатели на +записи, содержащие в качестве полей строки и динамические массивы.

      diff --git a/PABCNetHelp/LangGuide/Types/proctype.html b/PABCNetHelp/LangGuide/Types/proctype.html index b976f6f72..7ed1aaded 100644 --- a/PABCNetHelp/LangGuide/Types/proctype.html +++ b/PABCNetHelp/LangGuide/Types/proctype.html @@ -2,8 +2,8 @@ - - + + @@ -11,21 +11,21 @@ -

      -

      , , -, - . - - -() .

      -

      -

      - . :

      +

      Процедурный тип

      +

      Тип, предназначенный для хранения ссылок на процедуры или функции, называется +процедурным, а переменная такого типа - процедурной переменной. Основное +назначение процедурных переменных - хранение и косвенный вызов действий +(функций) в ходе выполнения программы и передача их в качестве параметров.

      +

      Описание процедурного типа

      +

      Описание процедурного типа совпадает с заголовком соответствующей процедуры +или функции без имени. Например:

      type
        ProcI = procedure (i: integer);
        FunI = function (x,y: integer): integer;

      -

      -, :

      +

      Процедурной переменной можно присвоить процедуру или функцию с совместимым +типом, например:

      function Mult(x,y: integer): integer;
      begin
      @@ -33,49 +33,49 @@ end;

      var f: FunI := Mult;

      -

      -- - :

      +

      Процедурной переменной можно также присвоить +лямбда-выражение с соответствующим +количеством параметров и типом возвращаемого значения:

      var f2: FunI := (x,y) -> x+2*y;

      -

      - , :

      +

      После этого можно вызвать процедуру или функцию через эту +процедурную переменную, пользуясь обычным синтаксисом вызова:

      write(f(2));  // 8
      write(f2(3)); // 10

      -

      C

      -

      - -. :

      +

      Cинонимы для процедурных типов

      +

      Для наиболее +распространенных процедурных типов в системном модуле определен ряд +синонимов. Приведем примеры с их использованием:

      var f3: IntFunc := x -> 2*x-1;
      var f4: Func<integer,real> := x -> 2.5*x;
      var f3: Action<real> := x -> write(x,'  ');
      var pr: Predicate<string> := s -> s.Length>0;

      -

      C

      -

      :

      +

      Cокращенные конструкции для процедурных типов

      +

      Для процедурных типов определены также сокращенные конструкции:

      -

      () -> T;         // - , T
      T1 -> T;         // c T1, T
      (T1,T2) -> T     // c T1 T2, T
      (T1,T2,T3) -> T  // - c T1, T2 T3, T
        ..
      () -> - ();        //
      T1 -> - ();        // c T1
      - (T1,T2) -> ()    // c T1 T2
      - (T1,T2,T3) -> () // c T1, T2 T3
        ..

      +

      () -> T;         // функция + без параметров, возвращающая T
      T1 -> T;         // функция c параметром T1, возвращающая T
      (T1,T2) -> T     // функция c параметрами T1 и T2, возвращающая T
      (T1,T2,T3) -> T  // + функция c параметрами T1, T2 и T3, возвращающая T
        и т.д.
      () -> + ();        // процедура без параметров
      T1 -> + ();        // процедура c параметром T1
      + (T1,T2) -> ()    // процедура c параметрами T1 и T2
      + (T1,T2,T3) -> () // процедура c параметрами T1, T2 и T3
        и т.д.

      -

      -, .

      -

      - : - -, ( , - ).

      -

      -

      - - -, :

      +

      Сокращенные конструкции не могут описывать процедурные переменные с +параметрами, передаваемыми по ссылке.

      +

      Для процедурных переменных принята +структурная эквивалентность типов: можно +присваивать друг другу и передавать в качестве параметров процедурные +переменные, совпадающие по структуре (типы и количество параметров, тип +возвращаемого значения).

      +

      Процедурные переменные в качестве параметров

      +

      Обычно процедурные переменные передаются как параметры для +реализации обратного вызова - вызова подпрограммы через процедурную +переменную, переданную в качестве параметра в другую подпрограмму:

      procedure forall(a: array of real; f: real->real);
      @@ -84,35 +84,35 @@     a[i] := f(a[i]);
      end;

      ...
      - forall(a,x->x*2); // 2
      + forall(a,x->x*2); // умножение элементов массива на 2
      forall(a,x->x+3); // - 3

      + увеличение элементов массива на 3

      -

      , - nil. - .

      -

      += -=

      -

      .NET. - , . / - += +

      Процедурная переменная может хранить нулевое значение, которое задается +константой nil. Вызов подпрограммы через нулевую процедурную +переменную приводит к ошибке.

      +

      Операции += и -= для процедурных переменных

      +

      Процедурные переменные реализуются через делегаты .NET. +Это означает, что они могут хранить несколько подпрограмм. Для добавления/отсоединения +подпрограмм используются операторы += и -=:

      p1 += mult2;
      p1 += add3;
      forall(a,p1);  

      -

      : -, .

      -

      :

      +

      Подпрограммы в этом случае вызываются в порядке прикрепления: вначале +умножение, потом сложение.

      +

      Отсоединение неприкрепленных подпрограмм не выполняет никаких действий:

      p1 -= print;

      -

      , / - . - -, , -.

      -

      +

      Кроме того, к процедурной переменной можно прикреплять/откреплять +классовые и экземплярные методы классов. В +последнем случае процедурная переменная в полях объекта запоминает некоторое +состояние, которое меняется между вызовами метода, связанного с этой процедурной +переменной.

      +

      Пример

      type
        A = class
      @@ -136,9 +136,9 @@ p;
        // 1 2 4 8 16 32 64 128 256 512
      end.

      -

      - --:

      +

      Подобное поведение гораздо проще реализовать с помощью +захвата переменной +лямбда-выражением:

      begin
        @@ -151,26 +151,26 @@   p;
      end.

      -

      + *

      -

      procedure, , - :

      +

      Операции + и * для процедурных переменных

      +

      Процедурные переменные типа procedure, а также имена процедур без параметров, +можно складывать:

      var p := p1 + p2;
      p;

      -

      - p1 p2.

      -

      procedure , - :

      +

      Вызов через такую процедурную переменную состоит в последовательном вызове +процедур p1 и p2.

      +

      Процедурные переменные типа procedure а также имена процедур без параметров, +можно умножать на число:

      var p := p1 * 5;
      p;

      -

      - p1 .

      -

      , - , - - :

      +

      Вызов через такую процедурную переменную состоит в последовательном вызове +процедуры p1 указанное количество раз.

      +

      Можно вызывать выражение, состоящее из сумм процедур и произведения процедур +на число, не используя промежуточную переменную - для этого достаточно взять +такое выражение в скобки:

      (p1 * 5 + p2 * 5);
      (5 * (p1 * p2));

      diff --git a/PABCNetHelp/LangGuide/Types/real.html b/PABCNetHelp/LangGuide/Types/real.html index a369e5272..05d26117f 100644 --- a/PABCNetHelp/LangGuide/Types/real.html +++ b/PABCNetHelp/LangGuide/Types/real.html @@ -2,7 +2,7 @@ - + @@ -26,16 +26,16 @@ -

      -

      , , - :

      +

      Вещественные типы

      +

      Ниже приводится таблица вещественных типов, содержащая их размер, количество +значащих цифр и диапазон допустимых значений:

      - - - - + + + + @@ -63,70 +63,70 @@ 79228162514264337593543950335
      ,
      -
      ТипРазмер, байтКоличество
      + значащих цифр
      Диапазон значений
      real
      -

      real double . real 5.0∙10-324, single 1.4∙10-45.

      -

      - : -MaxReal, MaxDouble +

      Типы real и double являются синонимами. Самое маленькое положительное число типа real приблизительно равно 5.0∙10-324, для типа single оно составляет приблизительно 1.4∙10-45.

      +

      Максимальные значения для каждого вещественного типа определены как внешние +стандартные константы: +MaxReal, MaxDouble и MaxSingle.

      -

      R - decimal - :

      +

      Для каждого вещественного типа R +кроме decimal +определены также следующие константы как статические члены класса:

      -

      R.MinValue - , - R;

      -

      R.MaxValue - , - R;

      -

      R.Epsilon - , - +

      R.MinValue - константа, представляющая + минимальное значение типа R;

      +

      R.MaxValue - константа, представляющая + максимальное значение типа R;

      +

      R.Epsilon - константа, + представляющая самое маленькое положительное число типа R;

      -

      R.NaN - , (, , - 0/0);

      -

      R.NegativeInfinity - , - - (, , -2/0);

      -

      R.PositiveInfinity - , - - (, , 2/0).

      +

      R.NaN - константа, представляющая не число (возникает, например, + при делении 0/0);

      +

      R.NegativeInfinity - константа, + представляющая отрицательную + бесконечность (возникает, например, при делении -2/0);

      +

      R.PositiveInfinity - константа, + представляющая положительную + бесконечность (возникает, например, при делении 2/0).

      -

      R decimal - :

      +

      Для каждого вещественного типа R кроме decimal определены +следующие статические функции:

      -

      R.IsNaN(r) - True, - r R.NaN, False - ;

      -

      R.IsInfinity(r) - - True, r - R.PositiveInfinity - R.NegativeInfinity, - False ;

      -

      R.IsPositiveInfinity(r) - - True, r - R.PositiveInfinity, - False ;

      -

      R.IsNegativeInfinity(r) - - True, r - R.NegativeInfinity, - False ;

      +

      R.IsNaN(r) - возвращает True, + если в r хранится значение R.NaN, и False + в противном случае;

      +

      R.IsInfinity(r) - возвращает + True, если в r + хранится значение R.PositiveInfinity + или R.NegativeInfinity, + и False в противном случае;

      +

      R.IsPositiveInfinity(r) - возвращает + True, если в r + хранится значение R.PositiveInfinity, + и False в противном случае;

      +

      R.IsNegativeInfinity(r) - возвращает + True, если в r + хранится значение R.NegativeInfinity, + и False в противном случае;

      -

      R - :

      +

      Для каждого вещественного типа R определены +следующие статические функции:

      R.Parse(s) - - , - R. , - ; 

      + функция, конвертирующая строковое представление числа в значение типа + R. Если преобразование невозможно, то + генерируется исключение; 

      R.TryParse(s,res) - , - R - res. , - True, - + функция, конвертирующая строковое представление числа в значение типа + R и записывающая его в переменную + res. Если преобразование возможно, то возвращается + значение True, в противном случае - False.

      -

      , - ToString, - R.

      -

      , -:

      +

      Кроме того, определена экземплярная +функция ToString, возвращающая строковое +представление переменной типа R.

      +

      Вещественные константы можно записывать как в форме с плавающей точкой, так и в экспоненциальной +форме:

      1.7    0.013    2.5e3 (2500)    1.4e-1 diff --git a/PABCNetHelp/LangGuide/Types/records.html b/PABCNetHelp/LangGuide/Types/records.html index 8d8411e9d..6cb378c7a 100644 --- a/PABCNetHelp/LangGuide/Types/records.html +++ b/PABCNetHelp/LangGuide/Types/records.html @@ -17,22 +17,22 @@ -

      -

      , - .

      -

      -

      - -:

      +

      Записи

      +

      Запись представляет собой набор элементов разных типов, каждый из которых +имеет свое имя и называется полем записи.

      +

      Описание записей

      +

      Тип записи в классическом языке +Паскаль описывается следующим +образом:

      record
      -
        
      +
         описания полей
      end

      -

      , - - var.

      -

      :

      +

      где описания полей имеет такой же вид, что и +раздел описания переменных без +ключевого слова var.

      +

      Например:

      type
        Person = record
      @@ -40,42 +40,42 @@     Age: integer;
        end;

      -

      -

      -. 

      -

      :

      +

      Переменные типа запись

      +

      Переменные типа запись хранят в непрерывном блоке памяти значения всех полей +записи. 

      +

      Для доступа к полям записей используется точечная нотация:

      var p: Person;
      begin

        - p.Name := '';
      -   p.Age := 20;
        writeln(p); // (,20)
      + p.Name := 'Иванов';
      +   p.Age := 20;
        writeln(p); // (Иванов,20)
      end.

      -

      write - .

      -

      -

      PascalABC.NET - -, - . , - PascalABC.NET :

      +

      По умолчанию процедура write выводит содержимое всех полей +записи в круглых скобках через запятую.

      +

      Методы и модификаторы доступа для записей

      +

      В PascalABC.NET внутри записей допустимо определять +методы и +свойства, а также использовать +модификаторы доступа. Таким образом, +описание записи в PascalABC.NET имеет вид:

      record
      -     1 
        -   2 
             +     секция1 
        +   секция2 
             ...
      end

      -

      :

      +

      Каждая секция имеет вид:

      -

       
      -   
      +

      модификатор доступа 
      +    описания полей
         -

      + объявления или описания методов и описания свойств

      -

      , - public -( ).

      -

      :

      +

      Модификатор доступа в первой секции может отсутствовать, в этом случае +подразумевается модификатор public +(все члены открыты).

      +

      Например:

      type
        Person = record
      @@ -89,34 +89,34 @@       Self.Age := Age;
          end;
          procedure Print;
        end;

      procedure Person.Print;
      - begin
        writelnFormat(': {0} : {1}', + begin
        writelnFormat('Имя: {0} Возраст: {1}', Name, Age);
      end;

      -

      , - , . - , Print , - . - Create - .

      -

      -

      - ( Delphi Object Pascal):

      +

      Как и в классах, методы могут +описываться как внутри, так и вне тела записи. В примере выше конструктор +описывается внутри записи, а метод Print объявляется внутри, а описывается вне +тела записи. Метод-конструктор всегда имеет имя Create и предназначен для +инициализации полей записи.

      +

      Инициализация записей

      +

      При описании переменной или константы типа запись можно использовать +инициализатор записи (как и в Delphi Object Pascal):

      -

      const p: Person = (Name: ''; +

      const p: Person = (Name: 'Петрова'; Age: 18);

      -

      var p: Person := (Name: ''; +

      var p: Person := (Name: 'Иванов'; Age: 20);

      -

      , . , - , - , :

      +

      Конструкторы для записей имеют тот же синтаксис, что и для классов. Однако, в +отличие от классов, вызов конструктора записи не создает новый объект в +динамической памяти, а только инициализирует поля записи:

      -

      var p: Person := new Person('',20);

      +

      var p: Person := new Person('Иванов',20);

      -

      -, - Init, - :

      +

      Более традиционно в записи определяется обычный метод-процедура, традиционно +с именем Init, +инициализирующая поля записи:

      type
        Person = record
          ...
      @@ -126,29 +126,29 @@       Self.Name := Name;
            Self.Age := Age;
          end;
          ...
        end;
      - ...
      var p: Person;
      p.Init('',20);

      + ...
      var p: Person;
      p.Init('Иванов',20);

      -

      -

      - :

      +

      Отличие записей от классов

      +

      Список отличий между записями и классами +приводятся ниже:

        -
      1. ( - ).
      2. -
      3. ; (, - , , ). .NET - System.ValueType - struct-.
      4. -
      5. , - public - ( ), - internal.
      6. +
      7. Запись представляет собой размерный тип (переменные типа запись +располагаются на стеке).
      8. +
      9. Записи нельзя наследовать; от записей также нельзя наследовать (отметим, + что записи, тем не менее, могут реализовывать интерфейсы). В .NET тип +записи неявно предполагается наследником типа System.ValueType и +реализуется struct-типом.
      10. +
      11. Если в записи не указан модификатор доступа, то по умолчанию + подразумевается модификатор public + (все члены открыты), а в классе - internal.
      -

      -

      write - . , - -ToString Object - - .

      -

      :

      +

      Вывод переменной типа запись

      +

      По умолчанию процедура write для переменной типа запись выводит +содержимое всех её публичных свойств и полей в круглых скобках через запятую. Чтобы изменить это поведение, в записи следует +переопределить виртуальный метод +ToString класса Object - в этом случае именно он будет +вызываться при выводе объекта.

      +

      Например:

      type
        Person = record
      @@ -158,26 +158,26 @@ string; override;
          begin
            Result := - string.Format(': {0}  : {1}', + string.Format('Имя: {0}  Возраст: {1}', Name, Age);
          end;
        end;
        ...
      - var p: Person := new Person('',20);
      - writeln(p); // :   : 20

      + var p: Person := new Person('Иванов',20);
      + writeln(p); // Имя: Иванов  Возраст: 20

      -

      -

      , , , - -:

      +

      Присваивание и передача в качестве параметров подпрограмм

      +

      Поскольку запись, в отличие от класса, представляет собой размерный тип, то присваивание записей копирует содержимое полей одной переменной-записи в +другую:

      d2 := d1;

      -

      : - - , .

      -

      , , - . , - , - :

      +

      Для записей принята именная эквивалентность типов: +можно присваивать друг другу и передавать в качестве параметров +подпрограмм записи, совпадающие только по имени.

      +

      Во избежание копирования те записи, которые содержат несколько полей, передаются в +подпрограммы по ссылке. Если запись не меняется внутри подпрограммы, то +используют ссылку на константу, если меняется - то ссылку на переменную:

      procedure PrintPerson(const p: Person);
      begin
        Print(p.Name, p.Age);
      @@ -185,9 +185,9 @@ p: Person; NewName: string);
      begin
        p.Name := Name;
      end;

      -

      -

      , - :

      +

      Сравнение на равенство

      +

      Записи одного типа можно сравнивать на равенство, при этом записи считаются +равными если значения всех полей совпадают:

      type Person = record
        name: string;
        age: integer;
      end;

      @@ -195,9 +195,9 @@ p1.age := 20;
        p2.age := 20;
        p1.name := 'Ivanov';
        p2.name := 'Ivanov';
        writeln(p1=p2); // True
      end.

      -

      -

      Delphi Object Pascal, PascalABC.NET - .

      +

      Замечание

      +

      В отличие от Delphi Object Pascal, в PascalABC.NET отсутствуют записи +с вариантами.

      diff --git a/PABCNetHelp/LangGuide/Types/sequences.html b/PABCNetHelp/LangGuide/Types/sequences.html index a15190bbf..7c0b4e55f 100644 --- a/PABCNetHelp/LangGuide/Types/sequences.html +++ b/PABCNetHelp/LangGuide/Types/sequences.html @@ -17,93 +17,93 @@ -

      -

      - , - . - array of T, - List<T>, -LinkedList<T>, -HashSet<T> +

      Последовательности

      +

      Последовательность - это набор данных, которые можно перебрать один за другим +в некотором порядке. К разновидностям последовательностей относятся одномерные +динамические массивы array of T, +списки List<T>, двусвязные списки +LinkedList<T>, множества +HashSet<T> и SortedSet<T>.

      -

      :

      +

      Тип последовательности конструируется следующим образом:

      -

      sequence of

      +

      sequence of тип элементов

      -

      . - , -.

      -

      sequence -of T .NET -System.Collections.Generic.IEnumerable<T>, - - , +

      Последовательности доступны только на чтение. Если требуется +изменить последовательность, то генерируется и возвращается новая +последовательность.

      +

      Тип sequence +of T является синонимом типа .NET +System.Collections.Generic.IEnumerable<T>, а последовательность - +синонимом объекта типа, поддерживающего интерфейс System.Collections.Generic.IEnumerable<T>.

      -

       

      -

      - +

       Инициализация последовательности

      +

      Последовательность инициализируется с помощью +стандартных функций Seq, SeqGen, SeqFill, SeqWhile, SeqRandom, SeqRandomReal, ReadSeqInteger, ReadSeqReal, -ReadSeqString. :

      +ReadSeqString. Например:

      var s: sequence of integer;
      s := Seq(1,3,5);
      s.Println;
      s := SeqGen(1,x->x*2,10);
      writeln(s);

      -

       

      -

      . - -.

      -

      ,

      +

       Хранение последовательности

      +

      Последовательность не хранится целиком в памяти. Элементы +последовательности генерируются алгоритмически и возвращаются по одному при +обходе.

      +

      Таким образом, в коде

      var s := SeqFill(1,10000000);
      writeln(s.Sum());

      -

      , - - s.

      -

      -

      +, - . :

      +

      основное время выполнения будет занимать вторая строка, а выполнение первой +строки будет сводиться лишь к запоминанию алгоритма генерации последовательности +в переменной s.

      +

      Соединение последовательностей

      +

      Две последовательности одного типа могут быть соединены операцией +, +при этом вторая последовательность дописывается в конец первой. Например:

      Seq(1,2,3) + Seq(5,6,7)
      Seq(1,2,3) + Arr(5,6,7)
      -

      , + - , -:

      +

      Кроме того, к последовательности некоторого типа можно присоединить операцией + +значение этого типа как первый или последний элемент последовательности, +например:

      Seq(1,2,3) + 5
      3 + Seq(5,6,7)
      3 + Seq(5,6,7) + 9
      -

      + +

      Операция + является сокращённым вариантом операции Concat.

      -

      :

      +

      Для последовательностей доступна также операция умножения на число:

      Seq(1,2,3) * 3
      -

      1 2 3 : 1 2 3 1 2 3 1 2 3

      -

      -

      +

      означает повторение последовательности 1 2 3 три раза: 1 2 3 1 2 3 1 2 3

      +

      Цикл по последовательности

      +

      Элементы последовательности можно обойти с помощью цикла foreach:

      foreach var x in s do
        if x>2 then
          Print(x);

      -

      -

      "" -T -array of T, List<T>, - LinkedList<T>, -HashSet<T> -SortedSet<T>,  , - +

      Совместимость по присваиванию

      +

      Переменной типа "последовательность" с элементами типа +T можно присвоить одномерный массив +array of T, список List<T>, +двусвязный список LinkedList<T>, множество +HashSet<T> или +SortedSet<T>,  а также объект любого класса, поддерживающего +интерфейс System.Collections.Generic.IEnumerable<T>.

      -

      -

      :

      +

      Стандартные подпрограммы и методы

      +

      Для последовательностей доступны:

       

      diff --git a/PABCNetHelp/LangGuide/Types/sets.html b/PABCNetHelp/LangGuide/Types/sets.html index 25f14c20b..ff154d25d 100644 --- a/PABCNetHelp/LangGuide/Types/sets.html +++ b/PABCNetHelp/LangGuide/Types/sets.html @@ -13,23 +13,23 @@ -

      -

      -. ; - .

      -

      PascalABC.NET - .NET: HashSet<T> (, , -, - O(1)) SortedSet<T> (, - , , - O(log(n))).

      -

      - - :

      +

      Множества

      +

      Множество представляет собой набор элементов одного +типа. Элементы множества считаются неупорядоченными; +каждый элемент может входить во множество не более одного раза.

      +

      В PascalABC.NET имеются встроенные множества и множества +библиотеки .NET: HashSet<T> (неупорядоченное, скорость операций вставки, +удаления, принадлежности - O(1)) и SortedSet<T> (упорядоченное, скорость +операций вставки, удаления, принадлежности - O(log(n))).

      +

      Тип +встроенного множества +описывается следующим образом:

      -

      set of

      +

      set of базовый тип

      -

      , - . .

      -

      :

      +

      В качестве базового может быть любой тип, +в том числе строковый и классовый. Исключение составляют типы указателей.

      +

      Например:

      type
        ByteSet = set of byte;
      @@ -39,87 +39,87 @@   SeasonSet = set of (Winter,Spring,Summer,Autumn);
        PersonSet = set of Person; 

      -

      : -, , -- . , -, ( ).

      -

      , -, :

      +

      Элементы базового типа сравниваются на равенство следующим образом: у простых +типов, строк и указателей сравниваются значения, у структурированных и у классов +- значения всех элементов или полей. Однако, если поля относятся к ссылочному +типу, то сравниваются только их адреса (неглубокое сравнение).

      +

      Чтобы сконструировать значение типа встроенное множество, используется так называемый конструктор +множества, имеющий вид:

      -

      [ ]

      +

      [список значений]

      -

      - , ( ) a..b, - a b -- . :

      +

      где в списке могут перечисляться через запятую либо +выражения базового типа, либо (для порядковых типов) их диапазоны в виде a..b, +где a и b +- выражения базового типа. Например:

      var
        bs: ByteSet := [1,3,5,20..25];
      -   fios: StringSet := ['','',''];

      +   fios: StringSet := ['Иванов','Петров','Сидорова'];

      -

      , :

      +

      Значения в списке могут отсутствовать, тогда множество является пустым:

      bs:=[];

      -

      - [] . - - :

      +

      Пустое множество-константа [] совместимо по присваиванию с множеством любого типа. +Однако тип пустого множества-константы не выводится автоматически:

      -

      var bs:=[]; // !

      +

      var bs:=[]; // Ошибка!

      -

      , , -, :

      +

      Множество, задаваемое конструктором множества, может иметь элементы различных +типов, например:

      [1..4,5.5,'c','xyz',Winter..Autumn]

      -

      , -. :

      +

      В этом случае вычисляется наиболее общий тип, и он объявляется базовым типом +множества. Например:

      [1..4,5.5] // set of real
      ['1','abc'] // set of string
      [1,'1'] // set of object

      -

      .

      -

      - -. s := s1   s1 - , - s, .

      -

      :

      +

      Для множеств имеет место структурная эквивалентность типов.

      +

      Множества целых и множества на базе типа и его диапазонного подтипа или на +базе двух диапазонных типов одного базового типа неявно преобразуются друг к +другу. Если при присваивании s := s1  во множестве s1 +содержатся элементы, которые не входят в диапазон значений базового типа для +множества s, то они отсекаются.

      +

      Например:

      var st: set of 3..9;
      ...
      - st := [1..5,8,10,12]; // st + st := [1..5,8,10,12]; // в st попадут значения [3..5,8]

      -

      in - :

      +

      Операция in проверяет +принадлежность элемента множеству:

      if Wed in bestdays then ...

      -

      - + (), - -(), * (), -= (), <> -(), <= ( ), < ( ), >= ( -) > ( ).

      -

      Write . -,

      +

      Для множеств определены +операции + (объединение), - +(разность), * (пересечение), += (равенство), <> +(неравенство), <= (нестрогое вложение), < (строгое вложение), >= (нестрого +содержит) и > (строго содержит).

      +

      Процедура Write при выводе множества выводит все его элементы. +Например,

      -

      Write(['','','']);

      +

      Write(['Иванов','Петров','Сидорова']);

      -

      ['','',''], -, , .

      -

      -foreach, -:

      +

      выведет ['Иванов','Петров','Сидорова'], при этом +данные, если это возможно, будут отсортированы по возрастанию.

      +

      Для перебора всех элементов множества можно использовать цикл +foreach, данные перебираются в некотором внутреннем +порядке:

      foreach var s in fios do
        Write(s,' ');

      -

      x s - s += [x] -Include: Include(s,x). x - s s -= [x] - Exclude: Exclude(s,x).

      +

      Для добавления элемента x к множеству s +используется конструкция s += [x] или стандартная процедура +Include: Include(s,x). Для удаления элемента x +из множества s используется конструкция s -= [x] +или стандартная процедура Exclude: Exclude(s,x).

      diff --git a/PABCNetHelp/LangGuide/Types/staticarrays.html b/PABCNetHelp/LangGuide/Types/staticarrays.html index 5f6a01bc0..f498b132f 100644 --- a/PABCNetHelp/LangGuide/Types/staticarrays.html +++ b/PABCNetHelp/LangGuide/Types/staticarrays.html @@ -11,23 +11,23 @@ -

      -

      -

      - . - .

      -

      - :

      +

      Статические массивы

      +

      Описание статического массива

      +

      Статические массивы в отличие от динамических +задают свой размер непосредственно в типе. Память под такие массивы выделяется +сразу при описании.

      +

      Тип статического массива +конструируется следующим образом:

      -

      array [ 1, - ..., - N] of

      +

      array [тип индекса1, + ..., тип + индексаN] of базовый тип

      -

      . - - a..b, - a b -- , . :

      +

      Тип индекса должен быть порядковым. Обычно тип индекса является +диапазонным и +представляется в виде a..b, +где a и b +- константные выражения целого, символьного или перечислимого типа. Например:

      type
        MyEnum = (w1,w2,w3,w4,w5);
      @@ -37,41 +37,41 @@   b: array ['a'..'z',w2..w4] of string;
        c: array [1..3] of array [1..4] of real;

      -

      -

      :

      +

      Инициализация статического массива

      +

      При описании можно также задавать инициализацию массива значениями:

      var
        a: Arr := (1,2,3,4,5,6,7,8,9,0);
        cc: array [1..3,1..4] of real := ((1,2,3,4), (5,6,7,8), (9,0,1,2));

      -

      -

      , - :

      +

      Присваивание статического массива

      +

      Статические массивы одного типа можно присваивать друг другу, +при этом будет производиться копирование содержимого одного массива в другой:

      a1 := a2;

      -

      -

      write , - :

      +

      Вывод статического массива

      +

      Процедура write выводит статический массив, заключая элементы в квадратные +скобки и разделяя их запятыми:

      var a: Arr := (1,2,3,4,5,6,7,8,9,0);
      var m := array [1..3,1..3] of integer := ((1,2,3),(4,5,6),(7,8,9));
      writeln(a); // [1,2,3,4,5]
      writeln(m); // [[1,2,3],[4,5,6],[7,8,9]]
      -

      -

      - - - - :

      +

      Передача статического массива в подпрограмму

      +

      При передаче статического массива в подпрограмму по значению также +производится копирование содержимого массива - фактического параметра в +массив - формальный параметр:

      -

      procedure p(a: Arr); // - - !
      +

      procedure p(a: Arr); // передавать статический массив по + значению - плохо!
      ...
      p(a1);

      -

      , - . - , , - - :

      +

      Это крайне расточительно, поэтому статические массивы рекомендуется +передавать по ссылке. Если массив не +меняется внутри подпрограммы, то его следует передавать как ссылку на константу, +если меняется - как ссылку на переменную:

      type Arr = array [2..10] of integer;

      procedure Squares(var @@ -84,8 +84,8 @@
      var a: Arr := (1,3,5,7,9,2,4,6,8);

      begin
        Squares(a);
        PrintArray(a);
      end.

      -

      - Low High.

      +

      Для доступа к нижней и верхней границам размерности одномерного массива +используются функции Low и High.

      diff --git a/PABCNetHelp/LangGuide/Types/string.html b/PABCNetHelp/LangGuide/Types/string.html index e24f33ee2..e92412bcf 100644 --- a/PABCNetHelp/LangGuide/Types/string.html +++ b/PABCNetHelp/LangGuide/Types/string.html @@ -3,7 +3,7 @@ - + @@ -21,67 +21,67 @@ -

      -

      string, -char .

      -

      . , : -s[i] i- - , . i - , .

      -

      : < > <= ->= = <>. -: s1 < s2 - i s1[i]<s2[i] - , s1 +

      Строковый тип

      +

      Строки имеют тип string, состоят из набора последовательно расположенных символов +char и используются для представления текста.

      +

      Строки могут иметь произвольную длину. К символам в строке можно обращаться, используя индекс: +s[i] обозначает i-тый +символ в строке, нумерация начинается с единицы. Если индекс i выходит за пределы +длины строки, то генерируется исключение.

      +

      Над строками определены операции сравнения: < > <= +>= = <>. Сравнение строк на неравенство осуществляется +лексикографически: s1 < s2 если для +первого несовпадающего символа с номером i s1[i]<s2[i] +или все символы строк совпадают, но s1 короче s2.

      -

      + - () . : ''+'' -= ''.

      -

      += - - - . :

      +

      Операция + для строк означает +конкатенацию (слияние) строк. Например: 'Петя'+'Маша' += 'ПетяМаша'.

      +

      Расширенный оператор присваивания += для строк +добавляет в конец строки - левого операнда строку - правый операнд. Например:

      -

      var s: string := '';
      - s += ''; // s = ''

      +

      var s: string := 'Петя';
      + s += 'Маша'; // s = 'ПетяМаша'

      -

      , - :

      -

      s := ': ' + 15; // s = ': 15'
      s := +

      Строка может складываться с числом, при этом число предварительно +преобразуется к строковому представлению:

      +

      s := 'Ширина: ' + 15; // s = 'Ширина: 15'
      s := 20.5 + ''; // s = '20.5'
      s += 1; // s = '20.51'

      -

      *: -s*n n*s - , s, - n :

      +

      Над строками и целыми определена операция *: +s*n и n*s +означает строку, образованную из строки s, +повторенной n раз:

      s := '*'*10; // s = '**********'
          s := 5*'ab' // s = 'ababababab'
          s := 'd'; s *= 3; // s = 'ddd'   

      -

      - .

      -

      System.String - .NET . - , -System.String. , .NET - -, PascalABC.NET . -, s[i] ( .NET -). , string - PascalABC.NET -:

      +

      Над строками определена также +операция взятия среза.

      +

      Строки реализуются типом System.String +платформы .NET и представляют собой ссылочный тип. +Таким образом, все операции над строками унаследованы от типа +System.String. Однако, в отличие от .NET - +строк, строки в PascalABC.NET изменяемы. +Например, можно изменить s[i] (в .NET +нельзя). Более того, строки string +в PascalABC.NET ведут себя как +размерные: после

      var s2 := 'Hello';
      var s1 := s2;
      s1[2] := 'a';

      -

      s2 . - (Copy On Write) - - , s1 s2 - .

      -

      ( .NET - - nil). , nil, - NET-.

      -

      , Delphi Object Pascal PascalABC.NET - +

      строка s2 не изменится. +Здесь происходит так называемое копирование при записи (Copy On Write) - при +изменении символа строки создаётся её копия, в результате s1 и s2 начинают +ссылаться на разные участки памяти.

      +

      По умолчанию строки инициализируются пустой строкой (в .NET - +значением nil). Однако, строке можно присвоить nil, +что необходимо для работы с NET-кодом.

      +

      Кроме того, для совместимости с Delphi Object Pascal в PascalABC.NET +реализованы короткие строки вида string[n].

      -

      .

      -

      string.

      +

      Стандартные подпрограммы работы со строками.

      +

      Члены класса string.

      diff --git a/PABCNetHelp/LangGuide/Types/stringmembers.html b/PABCNetHelp/LangGuide/Types/stringmembers.html index c3339b675..be7a9cae8 100644 --- a/PABCNetHelp/LangGuide/Types/stringmembers.html +++ b/PABCNetHelp/LangGuide/Types/stringmembers.html @@ -44,267 +44,267 @@ -

      string

      -

      string -PascalABC.NET , - , .

      -

      string -, . , -, .. .NET .

      -

      String

      +

      Методы типа string

      +

      Тип string в +PascalABC.NET является классом и содержит ряд свойств, +статических и экземплярных методов, а также методов расширения.

      +

      В методах класса string +считается, что строки индексируются с нуля. Кроме того, ни один метод не меняет +строку, т.к. строки в .NET являются неизменяемыми.

      +

      Свойства класса String

      - - + + - - +
      СвойствоОписание
      s[i] . - i- s. - PascalABC.NET 1. + Индексное свойство. Возвращает или позволяет + изменить i-тый символ строки s. + Строки в PascalABC.NET индексируются от 1.
      Length: integer Возвращает длину строки
      -

      String

      +

      Статические методы класса String

      - - + + - + - + - + - +
      МетодОписание
      String.Compare(s1,s2: string): integer s1 - s2. <0 - s1<s2, =0 s1=s2 - >0 s1>s2Сравнивает строки s1 и + s2. Возвращает число <0 если + s1<s2, =0 если s1=s2 + и >0 если s1>s2
      String.Compare(s1,s2: string; ignorecase: boolean): integer . ignorecase=True, - То же. Если ignorecase=True, + то строки сравниваются без учета регистра букв
      String.Format(fmtstr: string, params arr: array of object): string; arr - fmtstrФорматирует параметры arr + согласно форматной строке fmtstr
      String.Join(ss: array of string; delim: string): string , - ss delim - Возвращает строку, полученную + слиянием строк ss с использованием delim + в качестве разделителя
      -

      String

      -

      , , - , -. , , .

      +

      Экземплярные методы класса String

      +

      Отметим, что все экземплярные методы не меняют строку, как +это может показаться на первый взгляд, а при необходимости возвращают измененную +строку. Кроме того, считается, что символы в сроке индексируются с нуля.

      - - + + - + - + - + - + - + - + - + - + - + - - - + - - + - + - + - + - + - + - + - + - +
      МетодОписание
      Contains(s: string): boolean True, - s, False - Возвращает True, если текущая + строка содержит s, и False + в противном случае
      EndsWith(s: string): boolean True, - s, False - Возвращает True, если текущая + строка заканчивается на s, и False + в противном случае
      IndexOf(s: string): integer - s -1 - Возвращает индекс первого вхождения подстроки + s в текущую строку или -1 если подстрока не + найдена
      IndexOf(s: string; start,count: integer): integer - s -1 - . start - count Возвращает индекс первого вхождения подстроки + s в текущую строку или -1 если подстрока не + найдена. Поиск начинается с символа с номером start и распространяется + на следующие count символов
      IndexOfAny(cc: array of char): integer - Возвращает индекс первого + вхождения любого символа из массива сс
      Insert(from: integer; s: string): string , - s fromВозвращает строку, полученную из исходной строки + вставкой подстроки s в позицию from
      LastIndexOf(s: string): integer - s Возвращает индекс последнего вхождения подстроки + s в текущую строку
      LastIndexOf(s: string; start,count: integer): integer - s -1 - . start - count Возвращает индекс последнего вхождения подстроки + s в текущую строку или -1 если подстрока + не найдена. Поиск начинается с символа с номером start и + распространяется на следующие count символов
      LastIndexOfAny(a: array of char): integer - Возвращает индекс последнего вхождения любого + символа из массива сс
      PadLeft(n: integer): string , - + Возвращает строку, полученную из исходной строки + выравниванием по правому краю с заполнением пробелами слева до длины n
      PadRight(n: integer): string , - + Возвращает строку, полученную из исходной строки + выравниванием по левому краю с заполнением пробелами справа до длины n
      Remove(from,len: integer): string , - len fromВозвращает строку, полученную из исходной строки + удалением len симолов с позиции from
      Replace(s1,s2: string): string , - s1 + Возвращает строку, полученную из исходной строки + заменой всех вхождений подстроки s1 на строку s2
      Split(params delim: array of char): array of string , - , - delim ( - )Возвращает массив строк, полученный расщеплением + исходной строки на слова, при этом в качестве разделителей используется + любой из символов delim (по умолчанию - пробел)
      StartsWith(s: string): boolean True, - s, False - Возвращает True, если текущая + строка начинается на s, и False + в противном случае
      Substring(from,len: integer): string - from lenВозвращает подстроку исходной строки с позиции + from длины len
      ToCharArray: array of char - Возвращает динамический массив символов + исходной строки
      ToLower: string , Возвращает строку, приведенную к нижнему регистру
      ToUpper: string , Возвращает строку, приведенную к верхнему регистру
      Trim: string , - Возвращает строку, полученную из исходной удалением + лидирующих и завершающих пробелов
      TrimEnd(params cc: array of char): string , - ccВозвращает строку, полученную из исходной удалением + завершающих символов из массива cc
      TrimStart(params cc: array of char): string , -   ccВозвращает строку, полученную из исходной удалением + лидирующих  символов из массива cc
      -

      String

      -

      - .NET, - PascalABC.NET.

      +

      Методы расширения класса String

      +

      Некоторые методы расширения - стандартные для .NET, некоторые реализованы +только в PascalABC.NET.

      - - + + - + - + - + - + - + - + - + - + - + - + - +
      МетодОписание
      Inverse: string Возвращает инверсию строки
      Print , Выводит буквы строки, разделенные пробелом
      Println , , - Выводит буквы строки, разделенные пробелом, и осуществляет переход + на новую строку
      ReadInteger(var from: integer): integer from . - from Считывает из строки целое число с позиции from и возвращает его. + Позиция from при этом увеличивается на считанный элемент
      ReadReal(var from: integer): real from - . from Считывает из строки вещественное число с позиции from и возвращает + его. Позиция from при этом увеличивается на считанный элемент
      ReadWord(var from: integer): string - from . from - Считывает из строки слово до пробела или до конца строки с позиции + from и возвращает его. Позиция from при этом увеличивается на считанный + элемент
      ToInteger: integer . - , Преобразует строку к целому и возвращает его. + Если это невозможно, генерируется исключение
      ToIntegers: array of integer , . - . , В строке должны храниться целые, разделенные пробелами. Возвращается + массив целых. Если это невозможно, генерируется исключение
      ToReal: real - . , Преобразует строку к вещественному и возвращает + его. Если это невозможно, генерируется исключение
      ToReals: array of real , . - . , - В строке должны храниться вещественные, разделенные пробелами. + Возвращается массив вещественных. Если это невозможно, генерируется + исключение
      ToWords(params delim: array of char): array of string , - , - delim ( - ). - s.Split . - , , - delimВозвращает массив строк, полученный расщеплением + исходной строки на слова, при этом в качестве разделителей используется + любой из символов delim (по умолчанию - пробел). + В отличие от s.Split не включает в итоговый массив пустые строки. В + частности, это означает, что слова могут быть разделены несколькими + разделителями delim
      diff --git a/PABCNetHelp/LangGuide/Types/tuples.html b/PABCNetHelp/LangGuide/Types/tuples.html index bb3beccf9..946bf6217 100644 --- a/PABCNetHelp/LangGuide/Types/tuples.html +++ b/PABCNetHelp/LangGuide/Types/tuples.html @@ -3,9 +3,9 @@ - - - + + + @@ -13,100 +13,100 @@ -

      -

      - , - . - , -, . , - : - .

      -

      -

      :

      +

      Кортежи

      +

      Кортеж - это тип данных, являющийся аналогом +записи или класса. Как запись +или класс, кортеж представляет собой набор элементов разных +типов, но описывается существенно проще. Кроме того, +поля кортежа имеют предопределенные имена и являются неизменными: поменять поля кортежа +после его создания невозможно.

      +

      Тип кортежа

      +

      Для типа кортежа используется следующая запись:

      var t: (string,integer);
      -

      . - - , , , - .

      -

      System.Tuple .NET:

      +

      Данная запись похожа на объявление перечислимого типа. Если в круглых +скобках - новые имена, то это перечислимый тип, а если имена типов, то это - тип кортежа.

      +

      Кортежи представляются типом System.Tuple платформы .NET:

      var t: System.Tuple<string,integer>;
      -

      .

      +

      Однако данное представление может поменяться в будущем.

      -

      -

      - . :

      +

      Конструирование значений типа кортеж

      +

      Значения типа кортеж могут быть сконструированы в виде заключенного в круглые +скобки перечисления составляющих кортеж значений через запятую. Например:

      - t := ('',23); + t := ('Иванов',23);
      -

      :

      +

      Для построенных таким образом значений работает автовыведение типа:

      - var t1 := ('',(5,3,4)); // , -   + var t1 := ('Иванов',(5,3,4)); // кортеж, вторым + элементом которого является кортеж 
      -

      -

      , - :

      +

      Вывод кортежей

      +

      Как и при выводе записей, при выводе кортежей значения их элементов +заключаются в круглые скобки и перечисляются через запятую:

      - writeln(t);  // (,23)
      writeln(t1); // (,(5,3,4))
      + writeln(t);  // (Иванов,23)
      writeln(t1); // (Иванов,(5,3,4))
      -

      -

      () Item1, Item2 ..:

      +

      Доступ к элементам кортежа

      +

      Элементы (поля) кортежа имеют имена Item1, Item2 и т.д.:

      Print(t.Item1,t.Item2);
      -

      :

      +

      К элементам кортежа можно обращаться также по индексу:

      Print(t[0],t[1]);
      -

      .

      -

      : :

      +

      Индексы должны быть константными выражениями.

      +

      После создания кортеж неизменен: его поля нельзя менять:

      - t[1] := 20; //  
      -

      ( )

      -

      , - :

      + t[1] := 20; // ошибка   +

      Кортежное присваивание (распаковка кортежа в переменные)

      +

      Значения типа кортеж можно распаковать в переменные соответствующих типов, +используя кортежное присваивание:

      - var t := ('',23);
      var name: + var t := ('Иванов',23);
      var name: string;
      var age: integer;
      (name,age) := t;
      -

      , - , -. - :

      +

      Последнее присваивание, где в левой части оператора присваивания используется +заключенное в круглые скобки перечисление переменных, называется +кортежным. Кортежное присваивание компилятор заменяет на несколько +подряд идущих одиночных присваиваний:

      name := t[0];
      age := t[1];
       
      -

      . -, a b, - :

      +

      С использованием кортежного присваивания меняется стиль программирования. +Например, чтобы поменять местами значения двух переменных a и b, достаточно +написать следующее кортежное присваивание:

      (a,b) := (b,a);
      -

      , - :

      +

      В кортежном присваивании справа допускается количество элементов большее, чем +количество переменных слева:

      (a,b) := (1,2,3);
      -

      :

      +

      Кортежное присваивание можно совмещать с описанием переменных:

      (var a, var b) := (1,2);
      -

      +

      или

      var (a,b) := (1,2);
      -

      -

      . - - .

      -

      , , , - :

      +

      Использование кортежей в функциях

      +

      Кортежи позволяют упаковывать несколько значений в одно. Это оказывается +удобным если надо передавать несколько взаимосвязанных значений в качестве +параметра или возвращать из функции несколько значений.

      +

      Например, функция, вычисляющая площадь и периметр прямоугольника, может быть +записана в виде:

      function SP(a,b: real) := (a*b,2*(a+b));  
      -

      , - :

      +

      Чтобы воспользоваться результатом такой функции, удобно использовать +распаковку кортежа в переменные с описанием:

      var (S,P) := SP(2,3);  

       

      diff --git a/PABCNetHelp/LangGuide/Types/typecompatibility.html b/PABCNetHelp/LangGuide/Types/typecompatibility.html index d8cc03f60..61f4d8234 100644 --- a/PABCNetHelp/LangGuide/Types/typecompatibility.html +++ b/PABCNetHelp/LangGuide/Types/typecompatibility.html @@ -13,12 +13,12 @@
      -

      -

      -

      , T1 -T2 , - type T1 -= T2. ,

      +

      Эквивалентность и совместимость типов

      +

      Совпадение типов

      +

      Говорят, что типы T1 и +T2 совпадают, если они имеют одно имя либо +же определены в секции type в виде T1 += T2. Таким образом, в описаниях

      type
        IntArray = array [1..10] of integer;
      @@ -29,89 +29,89 @@   b1,c1: array [1..15] of integer;
        b2: array [1..15] of integer;

      -

      a1 -a2 b1 - c1 -, b1 b2 -- .

      -

      -

      , T1 -T2 , - :

      +

      переменные a1 и +a2 и переменные b1c1 имеют один и тот же +тип, а переменные b1 и b2 +- разные типы.

      +

      Эквивалентность типов

      +

      Говорят, что типы T1 и +T2 эквивалентны, если выполняется одно из +следующих условий:

        -
      1. T1 T2 -
      2. -
      3. T1 T2 - -
      4. -
      5. T1 T2 - -
      6. -
      7. T1 T2 - -
      8. -
      9. T1 T2 - - ( - - )
      10. +
      11. T1 и T2 + совпадают
      12. +
      13. T1 и T2 + - динамические массивы с совпадающими типами элементов
      14. +
      15. T1 и T2 + - указатели с совпадающими базовыми типами
      16. +
      17. T1 и T2 + - множества с совпадающими базовыми типами
      18. +
      19. T1 и T2 + - процедурные типы с совпадающим списком формальных параметров (и типом + возвращаемого значения - для функций)
      -

      - , , - . - , , - . - , PascalABC.NET - , , , - , - .

      -

      T1 +

      Если типы эквивалентны только если +их имена совпадают, то говорят, что имеет место +именная эквивалентность типов. Если типы эквивалентны если они +совпадают по структуре, то говорят, что имеет место +структурная эквивалентность типов. +Таким образом, в PascalABC.NET имеет место именная +эквивалентность для всех типов, кроме динамических массивов, множеств, +типизированных указателей и процедурных типов, для которых имеет место +структурная эквивалентность типов.

      +

      Только если типы T1 и T2 -, T1 - - T2.

      -

      -

      , T1 -T2 , - :

      +эквивалентны, фактический параметр типа T1 +может быть подставлен вместо формального параметра-переменной типа T2.

      +

      Совместимость типов

      +

      Говорят, что типы T1 и +T2 совместимы, если выполняется одно из +следующих условий:

        -
      1. T1 T2
      2. -
      3. T1 T2 -
      4. -
      5. T1 T2 -
      6. -
      7. - - -
      8. -
      9. T1 T2  - - -
      10. +
      11. T1 и T2 эквивалентны
      12. +
      13. T1 и T2 + принадлежат к целым типам
      14. +
      15. T1 и T2 + принадлежат к вещественным типам
      16. +
      17. Один из типов - поддиапазон другого или оба - поддиапазоны +некоторого типа
      18. +
      19. T1 и T2  + - множества с + совместимыми базовыми типами
      -

      -

      , T2 - T1 - T2 - T1, :

      +

      Совместимость типов по присваиванию

      +

      Говорят, что значение типа T2 +можно присвоить переменной типа T1 +или тип T2 +совместим по присваиванию с типом T1, если выполняется одно из следующих условий:

        -
      1. T1 T2 -
      2. -
      3. T1 - , T2 - -
      4. -
      5. T1 - , T2 - -
      6. +
      7. T1 и T2 + совместимы
      8. +
      9. T1 - вещественного типа, T2 + - целого
      10. +
      11. T1 - строкового типа, T2 + - символьного
      12. T1 - pointer, - T2 -
      13. -
      14. T1 - , + T2 - типизированный указатель
      15. +
      16. T1 - указатель или процедурная переменная, T2=nil
      17. -
      18. T1 - , - T2 - -
      19. +
      20. T1 - процедурная переменная, + T2 - имя процедуры или функции с соответствующим + списком параметров
      21. T1, T2 - - , - . - PascalABC.NET - Object, - ( ) + - классовые типы, один из них - наследник другого. Поскольку в + PascalABC.NET все типы кроме указателей являются + потомками типа Object, то значение + любого типа (кроме указателей) можно присвоить переменной типа Object
      22. -
      23. T1 - , T2 - - ,
      24. +
      25. T1 - тип интерфейса, T2 + - тип класса, реализующего этот интерфейс
      -

      T2 - T1, - , T2 - T1

      +

      Если тип T2 +совместим по присваиванию с типом T1, +то говорят также, что тип T2 +неявно приводится к типу T1

      diff --git a/PABCNetHelp/LangGuide/Types/typesprojection.html b/PABCNetHelp/LangGuide/Types/typesprojection.html index d05092df5..f1a040a91 100644 --- a/PABCNetHelp/LangGuide/Types/typesprojection.html +++ b/PABCNetHelp/LangGuide/Types/typesprojection.html @@ -16,16 +16,16 @@ -

      .NET

      -

      PascalABC.NET - .NET. - PascalABC.NET - .NET.

      +

      Отображение на типы .NET

      +

      Стандартные типы PascalABC.NET реализуются типами +библиотеки классов .NET. Далее приводится таблица +соответствий стандартных типов PascalABC.NET и +типов .NET.

       

      - - + + diff --git a/PABCNetHelp/LangGuide/Types/value_ref_types.html b/PABCNetHelp/LangGuide/Types/value_ref_types.html index cd2e82d03..3cbd3f8b8 100644 --- a/PABCNetHelp/LangGuide/Types/value_ref_types.html +++ b/PABCNetHelp/LangGuide/Types/value_ref_types.html @@ -2,8 +2,8 @@ - - + + @@ -11,142 +11,142 @@ -

      -

      PascalABC.NET : -.

      -

      . -, .NET- System.ValueType.

      -

      , - , , -, - - . , .NET- -System.Object System.ValueType.

      -

      :

      +

      Размерные и ссылочные типы

      +

      Большинство типов в PascalABC.NET подразделяются на две большие группы: размерные и +ссылочные.

      +

      К размерным относятся все простые типы и записи. Более +точно, все размерные типы наследуются от .NET-типа System.ValueType.

      +

      К ссылочным типам относятся строки, +динамические массивы, кортежи, +классы, +последовательности и +процедурный тип. Более точно, все ссылочные типы наследуются от .NET-типа +System.Object и не наследуются от System.ValueType.

      +

      Размерные и ссылочные типы отличаются следующими характеристиками:

        -
      • -
      • -
      • -
      • -
      • +
      • выделение памяти
      • +
      • управление памятью
      • +
      • присваивание
      • +
      • сравнение
      • +
      • передача в подпрограммы
      -

      , PascalABC.NET , Delphi -Object Pascal, . - , -, -. - , (, , -) - .

      -

      : -, , . - : - - .

      -

      -

      . - , - - . -.

      +

      Кроме того, в PascalABC.NET имеется несколько типов, унаследованных от Delphi +Object Pascal, которые трудно отнести к размерному или ссылочному типу. Это +статические массивы, +множества, размерные строки и +файлы. По представлению в памяти они относятся к +ссылочному типу, но по поведению (присваивание, сравнение, передача в +подпрограммы) - к размерному.

      +

      Размерные типы более эффективны при вычислениях: они занимают меньше памяти и +операции, выполняемые над небольшими размерными типами, максимально эффективны. +Ссылочные типы обладают большей гибкостью: память под них выделяется динамически +в процессе работы программы и освобождается автоматически когда объект +ссылочного типа перестаёт использоваться.

      +

      Выделение памяти

      +

      Память под переменную размерного типа выделяется на программном стеке. Для +глобальных переменных память выделяется при запуске программы, для локальных - в +момент вызова подпрограммы. При этом переменная размерного типа хранит значение этого +типа.

      -

      var i: integer; // i -
      +

      var i: integer; // под i выделяется память на + программном стеке
      i := 5;

      -

      - . , - nil ( ). - :

      +

      Переменная ссылочного типа хранит ссылку на объект некоторого +класса в динамической памяти. Если она не инициализирована, то хранит +специальное значение nil (нулевая ссылка). Для инициализации ссылочных +переменных используется вызов конструктора соответствующего класса:

      type Person = auto class
        name: string;
        age: integer;
      end;

      -

      var p: Person; // p nil, -
      p := new Person('',20); // - p
       

      +

      var p: Person; // p хранит значение nil, память + под объект не выделена
      p := new Person('Иванов',20); // конструктор + выделяет память под объект и записывает ссылку на него в переменную p
       

      -

      PascalABC.NET

      -

      PascalABC.NET - nil, .

      -

      -

      .

      +

      Особенности PascalABC.NET

      +

      Строки в PascalABC.NET инициализируются по умолчанию не +значением nil, а пустой строкой.

      +

      Присваивание

      +

      При присваивании переменных размерного типа копируется значение этого типа.

      type Point3 = record
        x,y,z: real;
      end;

      var p1,p2: Point3;
      p1.x := 1; p1.y := 2; p1.z - := 3;
      p2 := p1;  //
      Print(p2); // (1,2,3)
      - p1.x := 4; p1.y := 5; p1.z := 6;
      Print(p2); // (1,2,3) - p2 , - ..

      + := 3;
      p2 := p1;  // копируются все поля
      Print(p2); // (1,2,3)
      + p1.x := 4; p1.y := 5; p1.z := 6;
      Print(p2); // (1,2,3) - p2 не меняется, + т.к. занимает на стеке другую память

      -

      , - :

      +

      При присваивании переменных ссылочного типа копируется ссылка, в итоге после присваивания обе ссылки ссылаются на один объект в +динамической памяти:

      type Point3 = auto class
        x,y,z: real;
      end;

      -

      var p1,p2: Point3; // - nil
      p1 := new Point3(1,2,3);
      p2 := p1;  // - , p2 , p1
      Print(p2); // +

      var p1,p2: Point3; // переменные хранят нулевую + ссылку nil
      p1 := new Point3(1,2,3);
      p2 := p1;  // копируется + ссылка, после чего p2 ссылается на тот же объект, что и p1
      Print(p2); // (1,2,3)
      p1.x := 4; p1.y := 5; p1.z := 6;
      Print(p2); // (4,5,6) - - , p2 , p1

      + объект поменялся, p2 ссылается на тот же объект, что и p1

      -

      , - . , - :

      +

      Статические массивы, множества и размерные строки при присваивании ведут себя +как размерные типы. Так, при присваивании одного статического массива другому копируются +все элементы:

      var a,a1: array [1..1000000] - of integer;
      a1 := a; // 1000000 - ()

      + of integer;
      a1 := a; // копируются все 1000000 + элементов (долго)

      -

      -

      . -, .

      +

      Сравнение на равенство

      +

      Сравнение на равенство и на неравенство объектов размерного типа сравнивает их значения. В +частности, две переменные типа запись равны если равны все поля этих записей.

      type PersonRec = record
        name: string;
        age: integer;
      end;
      var
      p,p1: - PersonRec;
      p.name := ''; p.age := 20;
      p1.name := ''; + PersonRec;
      p.name := 'Иванов'; p.age := 20;
      p1.name := 'Иванов'; p1.age := 20;
      writeln(p1 = p); // True

      -

      - .

      +

      Две переменные ссылочного типа по умолчанию равны если они +ссылаются на один и тот же объект.

      type Person = auto class
        - name: string;
        age: integer;
      end;
      var
      p := new Person('',20);
      var - p1 := new Person('',20);
      writeln(p1 = p); // False
       

      + name: string;
        age: integer;
      end;
      var
      p := new Person('Иванов',20);
      var + p1 := new Person('Иванов',20);
      writeln(p1 = p); // False 

      -

      -. , -, , .

      -

      -

      - - . - , , - :

      +

      Однако операцию сравнения можно +перегрузить. Например, для строк и кортежей сравнение на равенство переопределено +так, что сравниваются не ссылки, а значения.

      +

      Передача в подпрограммы

      +

      При передаче размерных типов по значению происходит копирование значения +фактического параметра в переменную-формальный параметр. Если размерный тип +имеет большой размер, это может занимать продолжительное время, поэтому +размерный тип в этом случае передаётся по ссылке на константу:

      type Point3 = record
        x,y,z: real;
      end;

      procedure PrintPoint(const p: Point3);
      begin
        Print(p.x,p.y,p.z)
      end;

      -

      , , . - , - .

      +

      Ссылочные типы передаются в подпрограмму, как правило, по значению. При +передаче таких параметров происходит копирование ссылки, в результате формальный +и фактический параметр будут ссылаться на один объект.

      procedure Change666(a: array of integer);
      begin
        a[0] := 666;
      end;

      -

      - -.

      -

      - :

      +

      При этом в результате изменения формального параметра внутри подпрограммы +меняется и содержимое соответствующего фактического параметра при вызове +подпрограммы.

      +

      Ссылочные типы передаются в подпрограмму по ссылке только в случае если сама +ссылка меняется внутри подпрограммы:

      procedure CreateA(var a: array of integer);
      begin
        a := new integer[10];
      end;

      -

      , - . , - , - . :

      +

      Статические массивы, размерные строки и множества при передаче в подпрограммы +ведут себя как размерные типы. Например, неэффективно пытаться передать в +подпрограмму статический массив по значению, поскольку происходит копирование +большого объёма данных. Поэтому статические массивы всегда передаются по ссылке:

      type Arr = array [1..100] of integer;

      @@ -155,22 +155,22 @@ Object Pascal, for var i:=1 to n do
          Print(a[i])
      end;

      -

      -

      , - . - . - , - .

      -

      - . - . - , , - , - -.

      -

      , , - , -, .

      +

      Управление памятью

      +

      Размерные типы распределяются на программном стеке, поэтому не нуждаются в +специальном управлении памятью. Под глобальные размерные переменные память +распределена всё время работы программы. Под локальные размерные переменные +память выделяется в момент вызова подпрограммы, а освобождается в момент +завершения работы этой подпрограммы.

      +

      Управление памятью для ссылочных типов осуществляется автоматически +сборщиком мусора. Сборщик мусора запускается в неопределенный момент времени +когда управляемой памяти перестаёт хватать. Он возвращает в пул неиспользуемой +памяти те объекты, на которые больше никто не ссылается, после чего +дефрагментирует оставшуюся память, в результате чего динамическая память всегда +дефрагментирована и ее выделение при вызове конструктора происходит практически +мгновенно.

      +

      Статические массивы, размерные строки, множества и файлы с точки зрения +распределения памяти относятся к ссылочным и память, занимаемая значениями этого +типа, также управляется сборщиком мусора.

      \ No newline at end of file diff --git a/PABCNetHelp/LangGuide/Types/valuestrings.html b/PABCNetHelp/LangGuide/Types/valuestrings.html index 1775ce724..cb6615c53 100644 --- a/PABCNetHelp/LangGuide/Types/valuestrings.html +++ b/PABCNetHelp/LangGuide/Types/valuestrings.html @@ -3,7 +3,7 @@ - + @@ -11,29 +11,29 @@ -

      -

      Delphi Object Pascal PascalABC.NET - . -string[n], n - , - (n <= 255). Delphi Object Pascal - +

      Короткие строки

      +

      Для совместимости с Delphi Object Pascal в PascalABC.NET +реализованы короткие строки. Для их описания используется тип +string[n], где n - константа целого типа, указывающая длину +строки (n <= 255). Для совместимости с Delphi Object Pascal в стандартном модуле +описан тип shortstring=string[255].

      -

      .

      +

      Короткие строки ведут себя как обычные за исключением нескольких моментов.

        -
      1. , , - .
      2. -
      3. , , - . :
      4. +
      5. Короткие строки, в отличие от обычных, можно использовать как + компоненты типизированных файлов.
      6. +
      7. Если короткой строке присваивается строка, превосходящая её по размеру, + то она обрезается до размера исходной строки. Например:
      8. var s: string[3] := 'ABCD';
        Print(s); // ABC

        -
      9. nil.
      10. -
      11. - , var const.
      12. +
      13. Короткой строке в отличие от обычной нельзя присвоить nil.
      14. +
      15. Для эффективности короткие строки следует передавать в подпрограмму по + ссылке, используя модификатор var или const.
      -

      .

      -

      string.

      +

      Стандартные подпрограммы работы со строками.

      +

      Члены класса string.

      diff --git a/PABCNetHelp/LangGuide/_ProgrStruct_Defs/comments.html b/PABCNetHelp/LangGuide/_ProgrStruct_Defs/comments.html index 08edb6f37..b579e6823 100644 --- a/PABCNetHelp/LangGuide/_ProgrStruct_Defs/comments.html +++ b/PABCNetHelp/LangGuide/_ProgrStruct_Defs/comments.html @@ -2,7 +2,7 @@ - + @@ -10,28 +10,28 @@ -

      -

      - , - .

      -

      PascalABC.NET .

      -

      { } (* -*) :

      +

      Комментарии

      +

      Комментарии - это участки кода, игнорируемые компилятором и используемые +программистом для пояснения текста программы.

      +

      В PascalABC.NET имеется несколько типов комментарев.

      +

      Последовательность символов между фигурными скобками { } или символами (* и +*) считается комментарием:

      -

      {
      - }

      -

      (*
      - *)

      +

      { Это
      + комментарий }

      +

      (* Это
      + тоже комментарий *)

      -

      - // - :

      +

      Комментарием также считается любая последовательность +символов после символов // +и до конца строки:

      -

      var Version: integer; //

      +

      var Version: integer; // Версия продукта

      -

      :

      +

      Комментарии разных типов могут быть вложенными:

      -

      {
      - (* *)}

      +

      { Это еще один
      + (* комментарий *)}

       

       

      diff --git a/PABCNetHelp/LangGuide/_ProgrStruct_Defs/constdef.html b/PABCNetHelp/LangGuide/_ProgrStruct_Defs/constdef.html index 1d3a27871..1b52e20c8 100644 --- a/PABCNetHelp/LangGuide/_ProgrStruct_Defs/constdef.html +++ b/PABCNetHelp/LangGuide/_ProgrStruct_Defs/constdef.html @@ -10,21 +10,21 @@ -

      -

      - -const, -

      +

      Описание констант

      +

      Раздел описания именованных констант +начинается со служебного слова +const, после +которого следуют элементы описания вида

      - - = ; + имя константы + = значение;
      -

      +

      или

      - : - = ; + имя константы : тип + = значение;
      -

      :

      +

      Например:

      const
        Pi = 3.14;
      @@ -33,7 +33,7 @@   DigitsSet = ['0'..'9'];
        Arr: array [1..5] of integer = (1,3,5,7,9);
        Rec: record name: string; - age: integer end = (name: ''; + age: integer end = (name: 'Иванов'; age: 23);
        Arr2: array [1..2,1..2] of real = ((1,2),(3,4));

      diff --git a/PABCNetHelp/LangGuide/_ProgrStruct_Defs/identifiers.html b/PABCNetHelp/LangGuide/_ProgrStruct_Defs/identifiers.html index fc7a0d397..7650be161 100644 --- a/PABCNetHelp/LangGuide/_ProgrStruct_Defs/identifiers.html +++ b/PABCNetHelp/LangGuide/_ProgrStruct_Defs/identifiers.html @@ -2,10 +2,10 @@ - + - +Идентификаторы и ключевые слова
      PascalABC.NET .NETТип PascalABC.NETТип .NET
      int64