|
Использование файлов дополнений
Файл дополнений и его структура
Начиная с версии 4.14, к заданиям электронного задачника можно присоединять
дополнительные тексты (дополнения), которые берутся из текстовых файлов
специального формата (файлов дополнений) и отображаются в окне задачника или в сгенерированных им
html-документах. В окне задачника текст дополнения выводится в разделе отладки,
в html-документе сразу после текста задания (или после текста преамбулы).
Кроме того, с помощью файлов дополнений можно определять индивидуальные программы-заготовки для различных
учебных заданий.
Если программа учащегося также выводит
данные в раздел отладки, то текст дополнения и данные, выведенные программой,
отображаются в различных областях вывода раздела отладки: дополнение в области,
связанной с ярлычком или меткой «!», а данные, выведенные программой, в области,
связанной с ярлычком или меткой «*» (ярлычки используются в режиме окна с
фиксированной компоновкой, а метки в режиме с динамической компоновкой). Если
раздел отладки содержит единственную область вывода, то ярлычки и метки в нем не
используются.
Возможность использования дополнений позволяет настраивать имеющиеся группы заданий
без перекомпиляции динамических библиотек, в которых они реализованы.
Следует заметить, что начиная с версии 4.15 для этих же целей можно использовать
особый вид файлов дополнений
файлы внешних групп,
которые предоставляют больше возможностей, чем обычные файлы дополнений
(и при этом обычно имеют более простую структуру).
Файл дополнений содержит дополнительные настройки для конкретной
группы учебных заданий, включенной в задачник, в то время как файлы внешних групп могут рассматриваться как
материалы, непосредственно используемые при проведении занятия, посвященного определенной учебной теме
(и включающие не только задания из различных групп, но и программы, не связанные с задачником).
Файлы дополнений, как правило, разрабатываются автором
соответствующей группы заданий, тогда как файлы внешних групп могут быть подготовлены любым преподавателем,
использующим на занятиях электронный задачник и связанные с ним программные модули.
Все дополнения для определенной группы заданий размещаются в одном
текстовом файле с кодировкой CP1251 (начиная с версии задачника 4.22, можно также использовать файлы
с кодировкой UTF-8, указав в их начале переключатель [UTF-8]). Имя файла должно иметь следующий формат:
PT4<имя группы><язык><локаль>.txt
Элемент <язык> представляет собой переключатель языка программирования
вместе с квадратными скобками, но без символа «=» (о переключателях см. далее),
например [Pascal] или [CPP], <локаль> имеет вид «_ru» или «_en»;
любой из этих элементов может отсутствовать
(примеры: PT4Begin.txt , PT4For[Pascal].txt , PT4Array_ru.txt ,
PT4File[CPP]_en.txt ).
Поиск файла дополнений вначале осуществляется в рабочем каталоге учащегося, а
затем, при его отсутствии, в подкаталоге LIB системного каталога задачника. В
каждом каталоге вначале ищется файл с явно указанным языком и локалью,
соответствующей текущей локали задачника, затем файл с явно указанным языком, но
без локали, затем файл без указания языка, но с локалью, и, наконец, файл без
указания языка и локали.
Для файлов без указания языка дополнительно проверяется, что
в них присутствует хотя бы один переключатель, соответствующий требуемому языку;
если такой переключатель отсутствует, то поиск продолжается.
Примечание. Начиная с версии 4.18, переключатель языка программирования может обрамляться не квадратными скобками,
а символами подчеркивания, например: PT4For_Pascal_.txt или PT4File_CPP__en.txt
(обратите внимание на два рядом расположенных символа подчеркивания в последнем примере: первый из этих символов
завершает переключатель языка программирования, а второй начинает переключатель локали). Данный способ оформления
переключателя языка программирования добавлен из-за того, что в ftp-сервисах, которые могут использоваться
при создании удаленных репозиториев, часто вводятся ограничения на набор допустимых символов
для имен файлов, причем в этот набор обычно входит символ подчеркивания, но не входят различные виды скобок.
Таким образом, если файл дополнений предполагается размещать в удаленных репозиториях и при этом снабжать явным
указанием языка программирования, желательно обрамлять имя языка программирования не квадратными скобками,
а символами подчеркивания. При поиске файлов дополнений вначале ищется файл, в котором язык указан с использованием
символов подчеркивания, а затем файл, в котором язык указан с использованием квадратных скобок.
За исключением маркеров конца строки (с кодами 13 и 10), файл дополнений не должен
содержать управляющих символов (с кодами, меньшими 32). Все такие управляющие символы
(в том числе символы табуляции) перед обработкой файла дополнений заменяются на символ "?".
Файл дополнений состоит из элементов-переключателей и обычного текста,
который может включать управляющие последовательности.
Для разработки файлов дополнений (и файлов внешних групп) можно использовать программу
«Конструктор вариантов» PTVarMaker версии 3.0 или выше.
Для таких файлов программа PTVarMaker обеспечивает специальную подсветку синтаксиса
и предоставляет средства быстрой проверки правильности подготовленных файлов с помощью
модулей PT4Demo и PT4Load.
В качестве примера файлов дополнений можно использовать
демонстрационные файлы,
входящие в состав программы PTVarMaker, начиная с версии 3.0
(см. команды «? | 3 Пример файла дополнений (PT4)» и
«? | 4 Пример файла дополнений (PABC)»).
Переключатели: общее описание
Любой переключатель заключается в квадратные скобки и начинается с первой
позиции строки (или следует за другим переключателем на этой же строке). Обычный
текст специальным образом не выделяется; если в обычный текст надо включить
фрагмент, имеющий вид переключателя (т.е. начинающийся с первой позиции строки и
заключенный в квадратные скобки), то открывающую квадратную скобку надо
экранировать специальным символом (по умолчанию «%»). Если обычный текст
начинается с квадратной скобки в первой позиции, но не заканчивается закрывающей
квадратной скобкой, или если текст начинается не с первой позиции строки, то
экранирование выполнять не следует. Если в начале строки обычного текста требуется
указать фрагмент «%[», то до появления этой строки надо переопределить экранирующий
символ с помощью переключателя [escape] (описание этого переключателя приводится ниже).
Переключатели делятся на шесть групп:
- переключатели языка: [=<название языка>];
начиная с версии задачника 4.14, распознаются и обрабатываются
следующие переключатели: [=], [=Pascal], [=PascalABC], [=CPP],
[=VB], [=VB.NET], [=CS], [=Python], [=Java], [=Ruby]; все другие
переключатели, начинающиеся с символа «=», интерпретируются как
переключатели нераспознанных языков, и связанный с ними текст игнорируется
(в последующих версиях задачника набор распознаваемых языков может быть
расширен; в частности, в версии 4.20 был добавлен переключатель [=FS], соответствующий языку F#,
в версии 4.22 переключатель [=Julia], соответствующий языку Julia,
а в версии 4.23 переключатель [=С], соответствующий языку С);
- переключатели номера [<номер>] и переключатели диапазона
[<начальный номер>-<конечный номер>], допустимыми считаются номера от 0
до 1000; из них с конкретными заданиями связываются номера от 1 до 999, а значения 0 и 1000 имеют особый смысл
(см. далее);
начиная с версии 4.15, можно также использовать переключатель [*], предназначенный,
прежде всего, для применения в файлах внешних групп;
- переключатели форматирования [escape<символ>], [code], [text];
- переключатели режима [-<список режимов>] и [+<список режимов>]; режимы
кодируются латинскими буквами; версия задачника 4.14 распознает и
обрабатывает режимы W, H и L; обрабатываются также переключатели с пустым
списком режимов [-] и [+];
- переключатели преамбулы: [~] и [~<название подгруппы>];
- переключатели-комментарии: все прочие виды текста, заключенные в
квадратные скобки (в том числе пустой переключатель []) и расположенные в строке, начинающейся
с символа «[». Переключатели-комментарии при обработке текста игнорируются.
Начиная с версии 4.15, в текст файлов дополнений можно включать многострочные комментарии, которые должны
обрамляться специальными переключателями [<] (начало комментария) и [>] (конец комментария).
В версии 4.15 в набор переключателей добавлен переключатель [#<имя задания>]
и макропереключатель [*<список заданий>].
Поскольку эти виды переключателей предназначены для использования только в файлах внешних групп,
они, как и переключатель [*], описаны в разделе, посвященном внешним группам.
В версии 4.17 в набор переключателей добавлены
переключатели режима мультизаголовков [**] и [*<число>].
Поскольку эти виды переключателей предназначены, прежде всего, для использования в файлах внешних групп,
они описаны в разделе, посвященном внешним группам.
В версии 4.22 в набор переключателей добавлен переключатель кодировки UTF-8 [UTF-8],
позволяющий создавать файлы дополнений и файлы внешних групп в кодировке UTF-8.
На одной строке могут располагаться несколько переключателей языка и номера
(за исключением специальных переключателей номера, начинающихся со звездочки *: [*], [**], [*<число>],
[*<список заданий>]).
Все прочие переключатели, не являющиеся комментариями,
должны указываться на отдельной строке (в противном
случае эти переключатели не обрабатываются и рассматриваются как переключатели-комментарии).
Регистр букв в переключателях не учитывается; буквенные символы во
всех приведенных переключателях являются латинскими. Между переключателями,
расположенными на одной строке, могут располагаться пробелы, однако внутри
квадратных скобок пробелы допускаются только для переключателей-комментариев,
а также для переключателей преамбулы (в названии подгруппы).
Если при объединении нескольких переключателей в одной строке нарушается
согласование квадратных скобок или возникают вложенные квадратные скобки, то такая
строка рассматривается как один переключатель-комментарий
(исключение составляет переключатель [~<название подгруппы>];
во входящем в него названии подгруппы могут содержаться любые символы, в том числе
и квадратные скобки в любом порядке; все эти символы, за исключением завершающей
переключатель скобки «]», считаются частью названия подгруппы).
Переключатели языка и номера
Появление переключателя языка означает, что последующий текст (до появления
следующего переключателя языка на новой строке) относится к указанному языку. Если в
одной строке указано несколько переключателей языка, то последующий текст относится
ко всем указанным языкам. Если в строке указан переключатель [=], то, независимо от
наличия в этой же строке других переключателей языка, последующий текст будет
относиться ко всем доступным в задачнике языкам. В файле, в имени которого явно
указан язык, переключатель языка может отсутствовать, поскольку для таких файлов
сразу устанавливается переключатель, соответствующий языку, указанному в его
названии.
Появление переключателя номера означает, что последующий текст (до появления
следующего переключателя номера на новой строке) относится к заданию с указанным
номером. Если в строке указан переключатель диапазона, то последующий текст относится ко всем
заданиям с номерами из указанного диапазона. Если значение номера (или любой
границы диапазона) превышает 1000 или если начальное значение диапазона больше
конечного, то такой переключатель считается переключателем-комментарием и не
обрабатывается. На одной строке могут располагаться несколько переключателей номера,
в том числе и несколько переключателей диапазона (диапазоны в которых могут
перекрываться). Подчеркнем, что появление нового переключателя языка или
комментария не завершает фрагмент текста, относящийся к предыдущему номеру (или
группе номеров).
Номер 0 имеет особое значение. При обработке текста, связанного с этим номером,
не учитываются текущие значения переключателей режима, этот текст не включается
в окно задачника, часть текста в формате абзаца (переключатель [text])
добавляется к преамбуле данной группы в html-документе, а часть текста в формате
листинга (переключатель [code]) задает раздел начальных настроек для текста
программ-заготовок, являющийся общим для всех заданий группы.
Таким образом, для номера 0, независимо от текущих режимов, предполагается,
что все фрагменты текста в формате абзаца связываются только с режимом
html-документа (режим H), а все фрагменты текста в формате листинга
с режимом программы-заготовки (режим L). Переключатели преамбулы
(см. далее) позволяют изменить интерпретацию текста, связанного с номером 0.
Особое значение имеет и номер 1000: поскольку заданий с таким номером
не существует, этот номер можно использовать для явного указания конца
дополнения для любых предыдущих номеров; последующий текст (до очередного
появления переключателя номера) не будет связан ни с одним заданием.
Допускается наличие в файле дополнений нескольких фрагментов обычного текста,
относящихся к одному и тому же языку и даже к одному и тому же номеру задания для
одного и того же языка. В этом случае указанные фрагменты текста объединяются в
порядке их появления в файле. Например, в начале файла можно указать переключатели
[=][1-999] для текста, относящегося ко всем заданиям всех языков, а затем дополнить этот
общий текст фрагментами для отдельных заданий, связанных с различными языками.
Обычный текст, расположенный в начале файла дополнений (до первого указания
переключателя языка и переключателя номера), считается комментарием и в текст
заданий не включается.
Переключатели форматирования
Переключатели форматирования не влияют на настройки языка и номера. Действие
переключателя [code] распространяется до появления переключателя [text], действие
переключателя [text] распространяется до появления переключателя [code], действие
переключателя [escape] распространяется до нового появления этого же переключателя.
Переключатель [code] означает формат листинга, при котором сохраняется разбиение на
строки; в html-документе листинг дополнительно отображается моноширинным
шрифтом. Переключатель [text] означает формат абзаца; в этом формате все последующие
строки объединяются в одну, которая затем автоматически разбивается на части с учетом
ширины поля вывода; в html-документе такой текст отображается обычным шрифтом и
выводится одним абзацем. Если дополнение для некоторого задания надо оформить в
виде двух или более абзацев, то в разделе, соответствующем требуемому языку и номеру,
перед каждым последующим абзацем надо указать одну или несколько пустых строк.
Переключатели языка, номера, режима и преамбулы, а также переключатель [escape] не завершают текущий
абзац, тогда как переключатель [code] завершает. Таким образом, при отсутствии
переключателя [code] несколько фрагментов, относящихся к одному и тому же заданию,
будут оформляться в виде одного абзаца при условии, что эти фрагменты не содержат
пустых строк.
Переключатель [escape<символ>] позволяет указать для последующего текста в
файле дополнений новый экранирующий символ. В качестве экранирующего символа
можно указать любой символ, отличный от буквы, цифры и пробела (предпочтительными
являются сравнительно редко используемые символы @, $, %, &, #). При указании
ошибочного символа или нескольких символов переключатель [escape] не выполняет
никаких действий. Допускается многократно указывать данный переключатель, задавая
разные экранирующие символы в разных частях файла дополнений (чтобы избежать
возможных конфликтов при использовании управляющих последовательностей или
экранировании переключателей).
В начале файла дополнений по умолчанию устанавливается формат [code] и
экранирующий символ «%».
В обычном тексте файла дополнений начальные пробелы считаются значимыми и
учитываются; в формате [text] эти пробелы учитываются только при выводе текста в окне
задачника (например, при задании красной строки), но не в html-документе. Для
указания подряд идущих пробелов в формате абзаца, которые будут учитываться
в html-документе, следует использовать несколько подряд идущих неразрывных пробелов (см.
далее описание управляющей последовательности %~). Конечные пробелы во всех
строках файла дополнений автоматически удаляются; таким образом, строка, состоящая
из пробелов, преобразуется в пустую строку.
При выводе текста в окне задачника между обычным текстом и листингом (а также
между листингом и обычным текстом) автоматически добавляется пустая строка.
В формате листинга пустые строки учитываются, за исключением завершающих пустых строк
(которые автоматически удаляются). В формате абзаца, как уже было отмечено выше,
одна или несколько подряд идущих пустых строк интерпретируются как завершение текущего абзаца.
При объединении
нескольких подряд идущих непустых строк в одну (в формате абзаца) между ними
добавляется по одному пробелу.
Переключатели режима
Переключатели режима позволяют скрывать части текста при их выводе в одном
или нескольких возможных режимах: режиме вывода текста в окне задачника, а именно
в разделе отладки (режим W), режиме html-документа (режим H) и режиме текста-заготовки
для использования программным модулем PT4Load (режим L). Появление
переключателя режима, начинающегося с символа «-», обеспечивает скрытие
последующего текста в соответствующем режиме до появления аналогичного
переключателя, начинающегося с символа «+». С помощью данных переключателей
можно, например, отображать в разделе отладки некоторый общий для всех заданий
текст, который нецелесообразно многократно дублировать в html-документе; в этой
ситуации следует скрыть этот текст в html-документе (или вывести его только для
первого задания). В некоторых случаях переключатели режима использовать не
требуется; так, текст в формате обычного абзаца (переключатель [text]) не включается в
заготовки для модуля PT4Load, а текст, связанный с преамбулой (переключатель [0]), не
отображается в окне задачника.
Можно использовать комбинированные переключатели режима, начинающиеся с
символов «-» или «+» и содержащие любую комбинацию символов W, H. L
(комбинированные переключатели могут также содержать другие латинские буквы,
которые игнорируются), например,
[-WH] или [+HL]. Допустимы также комбинированные переключатели [-] и [+] (первый
эквивалентен комбинации [-WHL], второй - комбинации [+WHL]). Если в
переключателе, начинающемся с символов «-» или «+», содержатся символы,
отличающиеся от латинских букв, то такой переключатель считается комментарием и
игнорируется.
Переключатели преамбулы
Переключатели преамбулы [~] и [~<название подгруппы>] учитываются только
во фрагментах текста, связанных с номером 0. Выше уже было сказано, что
по умолчанию те фрагменты, которые имеют формат абзаца, добавляются в конец преамбулы
группы (в html-документе), а те фрагменты, которые имеют формат листинга,
определяют раздел начальных настроек для текста программ-заготовок,
являющийся общим для всех заданий группы. Однако такое поведение не позволяет
реализовать две полезные дополнительные возможности: добавление к преамбуле фрагментов кода
и добавление текста к преамбуле подгруппы, входящей в состав данной группы.
Эти возможности обеспечиваются переключателями преамбулы. После появления любого
из этих переключателей в пределах фрагмента текста, связанного с номером 0,
вся оставшаяся часть этого текста (в том числе и в формате листинга) добавляется
к преамбуле, причем текст после переключателя [~] добавляется к преамбуле группы,
а текст после переключателя [~<название подгруппы>]
к преамбуле подгруппы с указанным названием.
Регистр букв в названиях подгрупп не учитывается.
В названии подгруппы можно использовать любые символы, в том числе и квадратные
скобки в любом порядке, а также две специальные последовательности:
последовательность -- (два дефиса) означает короткое тире,
последовательность --- (три дефиса) означает длинное тире.
Подобно переключателям форматирования и режима, переключатель преамбулы должен
располагаться на отдельной строке файла дополнений.
Допускается наличие нескольких переключателей преамбулы с одним и тем же названием
подгруппы (или нескольких переключателей [~] без названия подгруппы); при этом
к соответствующей преамбуле добавляются все фрагменты, расположенные после этих
переключателей, в порядке их появления в файле дополнений.
При появлении в файле дополнений нового фрагмента текста, связанного с номером 0,
восстанавливаются настройки по умолчанию, действующие до появления в пределах
этого фрагмента первого переключателя преамбулы. При формировании текста
преамбул учитываются текущие переключатели форматирования, даже если они были
указаны перед переключателем преамбулы (или переключателем [0]).
Переключатели [<] и [>]
В версии 4.15 в набор переключателей добавлены парные переключатели [<] и [>],
позволяющие закомментировать фрагмент файла дополнений. Каждый из этих переключателей
должен располагаться на отдельной строке файла дополнений. После появления переключателя
[<] весь последующий текст вплоть до появления переключателя [>]
считается комментарием и не обрабатывается. Переключатель [>],
не завершающий закомментированный фрагмент, игнорируется; также игнорируется
переключатель [<], расположенный в закомментированном фрагменте. При наличии
переключателя [<] и отсутствии последующего переключателя [>]
закомментированной считается вся оставшаяся часть файла дополнений.
Переключатель кодировки UTF-8
В версии 4.22 в набор переключателей добавлен переключатель [UTF-8], который может указываться
в любом месте файла дополнений или файла внешних групп (как и для других переключателей, регистр букв
может быть произвольным). Наличие этого переключателя означает, что файл имеет кодировку UTF-8.
Включение переключателя [UTF-8] в набор переключателей
связано с тем, что в версии 4.22 реализована возможность
вывода текста в кодировке Unicode как в разделе отладки окна задачника, так и в
генерируемых задачником html-страницах с описаниями учебных групп.
При отсутствии переключателя [UTF-8] по-прежнему считается, что файл имеет кодировку CP1251.
Фрагменты программ-заготовок, определяемые в файле дополнений или файле внешних групп,
также могут содержать специальные символы Юникода (при наличии в файле переключателя [UTF-8]),
однако корректное отображение таких символов возможно только в средах программирования,
редакторы которых поддерживают кодировку UTF-8. Если редактор среды не поддерживает
кодировку UTF-8 (как, например, редактор среды Dev-С++ 5.11), то в созданной заготовке
будут корректно отображаться русские буквы (которые автоматически преобразуются
из кодировки UFT-8 в кодировку CP1251), а вместо специальных символов Юникода
будут выводиться символы «?». Программы-заготовки, определяемые в файлах
дополнений или файлах внешних групп с кодировкой CP1251 будут корректно отображаться
в любых редакторах, поскольку для редакторов, поддерживающих кодировку UTF-8,
выполняется автоматическое преобразование программ из кодировки CP1251 в кодировку UTF-8.
Уточняющие суффиксы языков в файлах дополнений
В версии 4.15 имя языка в соответствующем переключателе (или в имени файла
дополнений) может содержать дополнительный уточняющий суффикс (один или
несколько). Каждый уточняющий суффикс начинается с символа «дефис» (-), например,
PYTHON-3. Считается, что имени с уточняющим суффиксом соответствуют все имена,
полученные из данного имени удалением любого числа уточняющих суффиксов с конца.
Например, имени PYTHON-3, которое, наряду с именем PYTHON-2, поддерживается,
начиная с версии 4.15, соответствуют имена PYTHON-3 и PYTHON, а гипотетическому
имени CPP-11-VS имена CPP-11-VS, CPP-11 и CPP.
В задачнике версии 4.15 поддерживаются два суффикса для языка Python: 2 и 3.
Таким образом, начиная с версии 4.15, набор переключателей языка расширен: наряду с
переключателем [=Python], относящимся к любой версии языка Python, можно
использовать переключатели [=Python-2] и [=Python-3], относящиеся только к версиям 2 и
3 соответственно. Необходимость во введении подобных суффиксов обусловлена тем, что
в версиях языка Python 2 и 3 существенно различается синтаксис операторов ввода и
вывода, которые обязательно потребуются в заготовках программ, не связанных с
задачником (подобные заготовки можно определять во внешних группах, возможность
создания которых также появилась в версии 4.15).
Уточняющие суффиксы можно использовать не только в переключателях языка, но
и в именах файлов дополнений. Например, файл дополнений, специально рассчитанный
на версию 3 языка Python, может иметь имя PT4Demo[Python-3].txt. В тех версиях
задачника, в которых реализован суффикс 3, этот файл будет иметь приоритет перед
файлом с именем PT4Demo[Python].txt, хотя при отсутствии файла PT4Demo[Python-3].txt
для языка Python 3 будет загружен файл PT4Demo[Python].txt. Если версия
задачника не поддерживает указанный суффикс, то файлы дополнений с подобным
суффиксом не обрабатываются.
Подход, использующий уточняющие суффиксы, с одной стороны, обеспечивает
обратную совместимость (например, в любой новой версии останутся доступными файлы
дополнений для языка Python без уточняющего номера версии) и, с другой стороны, он
позволяет учитывать в файлах дополнений особенности различных версий (или даже сред
разработки) для одного и того же языка, если эти особенности учитываются в новых
версиях задачника.
Подчеркнем, что обеспечивается именно обратная совместимость: если в файле
дополнений используются новые имена языков с уточняющими суффиксами, то в
предыдущих версиях задачника эти имена не будут распознаваться. Это не является
недостатком, поскольку явное применение суффиксов означает, что в файле дополнений
используются специальные средства, присущие только некоторым версиям данного
языка. Если имеется возможность избежать применения подобных специальных средств,
то можно создать несколько вариантов файла дополнений, например,
PT4Demo[Python].txt, PT4Demo[Python-2].txt и PT4Demo[Python-3].txt; в этом случае
первый файл будет использоваться в старых версиях, которые не учитывали суффиксы, а
два других в новых версиях, которые эти суффиксы учитывают.
Начиная с версии 4.22, задачник не поддерживает версию 2 языка Python, поэтому
суффикс 3 для этого языка можно не использовать.
Управляющие последовательности
Обычный текст может содержать ряд управляющих последовательностей; в
управляющих последовательностях (в отличие от переключателей) учитывается регистр;
перед каждой управляющей последовательностью необходимо указывать текущий
экранирующий символ. Если указанный текст не следует интерпретировать как
управляющую последовательность, то перед появлением в файле этого текста
необходимо изменить экранирующий символ с помощью переключателя [escape].
Ниже приводится список управляющих последовательностей (в качестве
экранирующего символа в списке используется символ по умолчанию, т. е. %).
%{task} | заменяется на имя задания |
%{group} | заменяется на имя группы заданий |
%{number} | заменяется на номер задания |
%{B} и %{b} | устанавливает соответственно начало и конец режима
полужирного текста в html-документе (в окне задачника и в тексте программы-заготовки
данные последовательности игнорируются) |
%{I} и %{i} | устанавливает соответственно начало и конец режима курсивного
текста в html-документе (в окне задачника и в тексте программы-заготовки данные
последовательности игнорируются) |
%{S} и %{s} | устанавливает соответственно начало и конец режима
специального выделения в html-документе (в окне задачника и в тексте программы-
заготовки данные последовательности игнорируются); специальное выделение
используется, в частности, для вывода имен заданий; подобным образом рекомендуется
также выделять заголовки для указаний и примечаний |
%{M} и %{m} | устанавливает соответственно начало и конец режима
моноширинного текста в html-документе (в окне задачника и в тексте программы-заготовки
данные последовательности игнорируются) |
%{br} | задает явный разрыв строки (данная последовательность полезна
в формате абзаца, так как в формате листинга сохраняется разбиение на строки,
заданное в файле дополнений) |
%~ | заменяется на неразрывный пробел (в тексте программы-заготовки заменяется
на обычный пробел); данная последовательность позволяет, в частности, отображать
несколько подряд идущих пробелов в формате абзаца при отображении абзаца в html-документе |
%<< и %>> | заменяются на открывающую и закрывающую угловую кавычку
соответственно (в тексте программы-заготовки вместо угловых кавычек используются
прямые двойные кавычки ") |
%-- и %--- | заменяются на короткое «» и длинное «»
тире соответственно (в тексте программы-заготовки вместо тире используется обычный дефис); символ
«короткое тире» в html-документе можно также использовать для знака «минус» в
формулах |
%{mark} | заменяется на круглый маркер • (в тексте программы-заготовки вместо
круглого маркера изображается звездочка) |
В версии 4.17 появились новые управляющие последовательности, предназначенные, в основном, для использования
во внешних группах (см. их описание в разделе, посвященном внешним группам).
Файлы шаблонных дополнений
Наряду с «обычными» файлами дополнений, которые связываются с единственной
конкретной группой (имя этой группы содержится в их названии), задачник использует
специальные файлы шаблонных дополнений, связываемые с набором групп. Признаком
файла шаблонного дополнения является символ «_» после префикса PT4 (данный символ не
может указываться в имени обычного файла дополнений, так как символ подчеркивания
не может входить в имя группы). Файл шаблонного дополнения используется
программным модулем PT4Load для генерации программы-заготовки в случае, если
соответствующий текст отсутствует в «обычном» файле дополнений, связанном с данной
группой. Таким образом, файл шаблонных дополнений содержит только информацию для
создания текста программы-заготовки и не используется для вывода информации в окно
задачника или в html-документ. Стандартный файл шаблонных дополнений имеет имя
PT4_.txt ; в расширениях задачника PT for MPI и PT for Exam определяются связанные с
ними файлы шаблонных дополнений PT4_MPI.txt и PT4_Exam.txt соответственно.
В версии 4.15 появился файл шаблонных дополнений для программ-заготовок, не связанных с заданиями из задачника
(подобные заготовки могут создаваться во внешних группах). Этот файл имеет имя PT4__.txt
(с двумя символами подчеркивания).
Пример файла дополнений
В качестве примера опишем файл дополнений PT4ExamBegin_ru.txt , входящий в состав задачника
для подготовки к ЕГЭ по информатике PT for Exam, начиная с версии 2.0.
Этот файл содержит дополнительные настройки для подгруппы «Обработка статистических данных»,
включенной в группу ExamBegin. Особенностью этих задач является использование специальных программ-заготовок,
в которые уже включены описания переменных и раздел, обеспечивающий ввод исходных данных
(подобным образом часто оформляются задачи на разработку программ в вариантах ЕГЭ по информатике).
Для всех задач данной подгруппы можно использовать одинаковые заготовки. Чтобы не дублировать их текст
при отображении этих заданий в html-документе, целесообразно вынести тексты заготовок в преамбулу к данной подгруппе.
В преамбуле имеет смысл привести образцы заготовок на всех трех языках, поддерживаемых задачником PT for Exam
версии 2.0 (Pascal, C++, Python 3). В то же время при отображении текста соответствующей заготовки в окне задачника
(и при генерации самой программы-заготовки в модуле PT4Load)
следует использовать тот вариант, который соответствует текущему языку, используемому учащимся
при решении задачи.
В окне задачника (как и в преамбуле html-документа) нецелесообразно приводить служебные элементы программы-заготовки
(такие как директивы для подключения дополнительных библиотек или вызов процедуры Task, обеспечивающий инициализацию
задания), хотя эти элементы являются обязательными для включения в текст программы-заготовки, загружаемой
в среду программирования.
Приведем полное содержимое файла PT4ExamBegin_ru.txt и затем прокомментируем его части.
Для большей наглядности все переключатели и управляющие последовательности выделяются полужирным шрифтом.
[=Pascal][=PascalABC][=CPP][=Python][0]
[~Обработка статистических данных]
[text]
При решении задач данной подгруппы необходимо использовать
заготовку, включающую описания переменных и ввод
исходных данных. Ниже приводятся образцы программ-заготовок для трех языков
программирования.
%{B}Pascal%{b}
[code]
const
N = 15;
var
a: array[1..N] of integer;
i, j, k: integer;
begin
for i := 1 to N do
read(a[i]);
end.
[text]
%{B}C++%{b}
[code]
#define N 15
int a[N];
int i, j, k;
for (i = 0; i < N; i++)
cin >> a[i];
[text]
%{B}Python 3%{b}
[code]
N = 15
i = None
j = None
k = None
a = [int(i) for i in input().split()]
[text]
Требуется дополнить программу-заготовку алгоритмом
решения задачи, используя только те переменные, которые указаны в тексте
заготовки (все переменные можно не использовать).
[123-130]
[-H]
Предлагаемая заготовка содержит описания переменных и ввод
исходных данных. Требуется дополнить программу-заготовку алгоритмом
решения задачи, используя только те переменные, которые указаны в тексте
заготовки (все переменные можно не использовать).
[code]
[=Pascal][=PascalABC]
const
N = 15;
var
a: array[1..N] of integer;
i, j, k: integer;
begin
[-W]
Task('%{task}');
[+W]
for i := 1 to N do
read(a[i]);
end.
[=CPP]
[-W]
void Solve()
{
Task("%{task}");
[+W]
#define N 15
int a[N];
int i, j, k;
for (i = 0; i < N; i++)
cin >> a[i];
[-W]
}
[=Python]
def solve():
task("%{task}")
[+W]
N = 15
i = None
j = None
k = None
a = [int(i) for i in input().split()]
Файл начинается с раздела, предназначенного для вывода в преамбуле соответствующей подгруппы
в html-документе (ниже фрагменты этого раздела приводятся еще раз).
Этот раздел будет одинаковым для всех трех языков, поэтому в первой строке
указываются все языки, используемые задачником PT for Exam (в том числе и язык PascalABC.NET,
для которого предусмотрен особый переключатель). Завершающий эту строку переключатель [0]
указывает, что последующий текст не связывается с конкретным заданием, а относится
к преамбуле. В следующей строке используется переключатель [~Обработка статистических данных],
уточняющий, что должна быть дополнена преамбула к подгруппе «Обработка статистических данных».
[=Pascal][=PascalABC][=CPP][=Python][0]
[~Обработка статистических данных]
Сам текст преамбулы состоит как из обычных абзацев, так и из фрагментов программного кода.
Для переключения между этими форматами используются переключатели [text] и [code].
Перед каждым фрагментом программного кода в преамбуле целесообразно указать название языка;
для большей наглядности это название оформляется
в виде абзаца обычного текста (т. е. не выводится моноширинным шрифтом) и выделяется полужирным шрифтом
с помощью управляющих последовательностей %{B} и %{b}. Чтобы текст «Pascal»
перед первым фрагментом кода выводился в новом абзаце, перед ним добавлена пустая строка.
Для других заголовков пустую строку можно не добавлять, так как при переключении
с формата [code] на формат [text] последующий текст автоматически начинается с нового абзаца.
Заметим также, что при включении данного текста в html-документ в нем будет выполнена
автоматическая замена символов < и > на соответствующие html-последовательности
< и > .
[text]
При решении задач данной подгруппы необходимо использовать
заготовку, включающую описания переменных и ввод
исходных данных. Ниже приводятся образцы программ-заготовок для трех языков
программирования.
%{B}Pascal%{b}
[code]
const
N = 15;
var
a: array[1..N] of integer;
i, j, k: integer;
begin
for i := 1 to N do
read(a[i]);
end.
[text]
%{B}C++%{b}
[code]
#define N 15
int a[N];
int i, j, k;
for (i = 0; i < N; i++)
cin >> a[i];
[text]
%{B}Python 3%{b}
[code]
N = 15
i = None
j = None
k = None
a = [int(i) for i in input().split()]
[text]
Требуется дополнить программу-заготовку алгоритмом
решения задачи, используя только те переменные, которые указаны в тексте
заготовки (все переменные можно не использовать).
Следующий фрагмент файла дополнений (приведенный ниже) предназначен для включения в
раздел отладки окна задачника.
Он начинается с переключателя [123-130], означающего, что весь последующий текст
надо связать с заданиями группы ExamBegin с номерами от 123 до 130.
После этого следует переключатель режима [-H], означающий, что последующий
текст не будет включаться в текст html-документа.
Затем идет текст абзаца. Перед ним не требуется
еще раз указывать переключатель [text], поскольку действие
ранее указанного переключателя [text] (см. завершающую часть предыдущего фрагмента)
сохраняется. Данный текст не включается в текст программы-заготовки для задач
с указанными номерами, так как в тексте заготовок могут использоваться только
фрагменты в формате [code].
[123-130]
[-H]
Предлагаемая заготовка содержит описания переменных и ввод
исходных данных. Требуется дополнить программу-заготовку алгоритмом
решения задачи, используя только те переменные, которые указаны в тексте
заготовки (все переменные можно не использовать).
В завершающей части файла дополнений (приведенной ниже) указываются фрагменты
программного кода, которые требуется как
отобразить в окне задачника, так и использовать при создании программ-заготовок
для данных заданий. Начинается данный фрагмент переключением в формат [code].
Поскольку фрагменты должны быть различными для разных языков,
перед каждым фрагментом кода используется переключатель для соответствующего языка
(повторно указывать переключатель номера при этом не требуется, так как действие
предыдущего переключателя [123-130] продолжается и после переключения на другой язык).
Как было отмечено выше, приводить в окне задачника служебные части заготовок
(такие как вызов процедуры Task или заголовок функции Solve) нецелесообразно,
поэтому эти части обрамляются переключателями [-W] и [+W] (фрагмент текста между
этими переключателями не добавляется о раздел отладки окна задачника,
но включается в текст программы-заготовки). Следует также обратить внимание
на использование управляющей последовательности %{task}, на место которой
подставляется фактическое имя выполняемого задания.
[code]
[=Pascal][=PascalABC]
const
N = 15;
var
a: array[1..N] of integer;
i, j, k: integer;
begin
[-W]
Task('%{task}');
[+W]
for i := 1 to N do
read(a[i]);
end.
[=CPP]
[-W]
void Solve()
{
Task("%{task}");
[+W]
#define N 15
int a[N];
int i, j, k;
for (i = 0; i < N; i++)
cin >> a[i];
[-W]
}
[=Python]
def solve():
task("%{task}")
[+W]
N = 15
i = None
j = None
k = None
a = [int(i) for i in input().split()]
При отображении
текста в формате [code] в любом режиме (как в окне задачника, так и в программе-заготовке,
а также и в html-документе) сохраняется разбиение на строки и все начальные отступы.
В программу-заготовку будут также добавлены и пустые строки, отмечающие позицию,
в которой учащийся должен добавить решение задачи. Заметим, что пустая строка
в программе для языка Pascal появится и в тексте, отображаемом в окне задачника,
тогда как пустая строка в программе для языка C++ в окне задачника будет удалена,
поскольку она является последней строкой фрагмента кода, предназначенной для отображения
в окне задачника, а завершающие пустые строки во фрагментах кода
не отображаются.
Следует также обратить внимание на то, что действие переключателей режима
продолжается и после смены языка программирования. В частности,
режим [-W], подавляющий вывод в окно задачника, сохраняется после
переключения с языка C++ на язык Python.
Еще один пример файла дополнений, содержащий большинство переключателей
и указания по их использованию, включен в программу PTVarMaker
(см. команды «? | 3 Пример файла дополнений (PT4)» и
«? | 4 Пример файла дополнений (PABC)»).
|