Описание языка PascalABC.NET - W Cat
Шрифт:
Интервал:
Закладка:
Если о типе исходных или результирующих числовых данных в задании ничего не сказано, то предполагаются вещественные данные. Исключение составляет группы заданий 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++.
В базовый набор заданий включены две группы Exam: группа ExamBegin, содержащая задания на освоение базовых алгоритмов, включенных в кодификатор ЕГЭ по информатике и ИКТ, и группа ExamTaskC, содержащая типовые задания повышенного уровня сложности, включенных в ЕГЭ в качестве заданий группы С. Каждая из групп состоит из 100 учебных заданий; 20 заданий каждой группы доступны для выполнения в мини-варианте задачника.
Особенностью групп Exam является то, что при их выполнении не требуется использовать специальные средства ввода-вывода, входящие в задачник. Для того чтобы максимально приблизить вид программы, выполняющей задание, к виду, требуемому на экзамене, в задачнике реализован специальный механизм, позволяющий оформлять ввод-вывод данных с применением стандартных средств используемого языка программирования: процедур Read/Readln-Write/Writeln для языка Pascal и стандартных потоков ввода-вывода cin-cout для языка C++.
При использовании заданий групп Exam сохраняются основные особенности задачника: автоматическое предоставление программе учащегося исходных данных и автоматическая проверка правильности предложенного решения. Следует отметить, что эти особенности оказываются наиболее полезными при решении задач повышенной сложности (группа ExamTaskC), так как в них, как правило, должны использоваться наборы исходных данных большого размера.
При выполнении заданий групп Exam учащийся должен обеспечивать надлежащее форматирование выходных данных (в других группах заданий это не требуется, поскольку средства вывода электронного задачника выполняют форматирование автоматически).
Отказ от использовании специальных средств ввода-вывода приводит к тому, что любые ошибки ввода-вывода уже не обрабатываются задачником и обычно приводят к сообщениям об ошибке времени выполнения. Это обстоятельство несколько затрудняет поиск ошибок, но в то же время позволяет приблизить его к реальному процессу отладки программы, не использующему подсказки" задачника.
Модуль PT4
Описанные в данном разделе типы и процедуры будут доступны в программе, если к ней с помощью оператора uses подключен модуль PT4 (см. пример программы, использующей задачник Programming Taskbook). Дополнительные типы данных PNode и TNode
type
PNode = ^TNode;
TNode = record
Data: integer;
Next: PNode;
Prev: PNode;
Left: PNode;
Right: PNode;
Parent: PNode;
;
Типы 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 и TNode.
Инициализация задания, ввод-вывод данныхПроцедура инициализирует задание с именем Name. Она должна вызываться в начале программы, выполняющей это задание (до вызова процедур ввода-вывода). Если в программе, подключившей модуль PT4, не указана процедура Task, то при запуске программы будет выведено окно с сообщением Не вызвана процедура Task с именем задания".
Имя задания Name должно включать имя темы и порядковый номер в пределах темы (например, 'Begin3'). Регистр букв в имени темы может быть произвольным. Если указана неверная тема задания, то программа выведет сообщение об ошибке, в котором будут перечислены названия всех имеющихся тем. Если указан недопустимый номер задания, то программа выведет сообщение, в котором будет указан диапазон допустимых номеров для данной темы. Если после имени задания в параметре Name указан символ ? (например, 'Begin1?'), то программа будет работать в демонстрационном режиме.
Начиная с версии 4.8, процедура Task может также использоваться для генерации и вывода на экран html-страницы с текстом задания или группы заданий. Для этого необходимо указать в качестве параметра Name имя конкретного задания или группы заданий и символ #, например, 'Begin3#' или 'Begin#'. Дополнительные сведения о генерации html-страниц с описаниями заданий приводятся в разделе, посвященном демонстрационному режиму задачника.
Если при первом вызове процедуры Task в параметре не указывается символ #, то все последующие вызовы процедуры Task игнорируются. Если при первом вызове процедуры Task в параметре указывается символ #, то игнорируются все последующие вызовы процедуры Task, не содержащие этот символ. С помощью нескольких вызовов процедуры Task, содержащей в параметре символ #, можно обеспечить генерацию html-страницы с описанием нескольких групп заданий, причем в каждой группе при этом можно отображать только некоторые задания.
procedure GetB(var X: boolean);
procedure GetC(var X: char);
procedure GetN(var X: integer);
procedure GetR(var X: real);
procedure GetS(var X: string);
procedure GetP(var X: PNode);
Процедуры обеспечивают ввод исходных данных в программу, выполняющую учебное задание. Они должны вызываться после вызова процедуры Task; в случае их вызова до вызова процедуры Task при запуске программы будет выведено сообщение об ошибке В начале программы не вызвана процедура Task с именем задания".