Bilety_OP
.docxЗамечания:
-
Данный документ содержит минимум информации по соответствующему билету.
-
Информация, приведённая в данном документе взята из учебника и лекций.
-
Для лучшего понимания желательно обратиться к учебнику нового издания по программированию.
-
Помните, дополнительные вопросы, задаваемые на экзамене, могут быть направлены на те моменты, которые не описаны тут.
-
Совет: Учите билеты не по порядку, самый оптимальный вариант с 1 по 20, затем с 20 по 1.
-
На экзамене количество билетов превышает 20, но теоретическая часть будет отнесена к этим 20 билетам.
Удачи в подготовке и на экзамене!
Билет 1 Синтаксис и семантика языков программирования. Алфавит языка Delphi Pascal. Описание синтаксиса языка: синтаксические диаграммы.
Синтаксис языка - совокупность правил, определяющих допустимые конструкции (слова, предложения) языка, его форму.
Семантика языка - совокупность правил, определяющих смысл синтаксически корректных конструкций языка, его содержание.
Описание синтаксиса языка включает определение алфавита и правил построения различных конструкций языка из символов алфавита и более простых конструкций. Для этого обычно используют форму Бэкуса-Наура (БНФ) или синтаксические диаграммы.
Алфавит языка программирования Delphi Pascal включает:
-
Латинские буквы без различия строчных и прописных и знак "_";
-
Цифры (0..9);
-
Шестнадцатеричные цифры: 0..9, a..f (A..F);
-
Специальные символы: + - * / = := ; < > и т.д.;
-
Служебные слова: do, while, begin, end и т.д.
Синтаксические диаграммы отображают правила построения конструкций в более наглядной форме. На такой диаграмме символы алфавита изображают блоками в овальных рамках или кружках, названия конструкций - в прямоугольных рамках, а правила построения конструкций - в виде линий со стрелками на концах.
Семантику языка программирования закладывают в его компилятор. Таким образом, синтаксически корректная программа, написанная на языке программирования, после преобразования её в последовательность машинных команд обеспечит выполнение компьютером требуемых операций.
Билет 2 Представление данных в Delphi Pascal: константы и переменные. Классификация скалярных типов данных, операции над ними, совместимость типов данных и операции преобразования типов.
Константы определяются один раз и не изменяются во время выполнения программы. Используют следующие типы констант:
-
Числовые константы (целые и вещественные десятичные и шестнадцатеричные числа);
-
Логические константы (true, false);
-
Символьные и строковые константы (целые числа - коды по расширенной таблице ANSI, включающей коды букв русского алфавита);
-
Конструкторы множеств;
-
"Нулевой" адрес - nil.
Константы используются в двух формах: как литералы и как поименованные константы.
Литерал - значение константы, записанное непосредственно в программе.
Поименованные константы объявляют в инструкции раздела описаний const.
Переменные - поименованные значения, которые могут изменяться в процессе выполнения программы. Они используются для хранения промежуточных и окончательных результатов, а также индексов и других вспомогательных значений.
Объявление переменных выполняют в разделе описаний программы, причём при этом указываются не только идентификатор переменной, но и её тип.
Тип переменной определяет:
-
Возможный набор значений переменной;
-
Размер её внутреннего представления;
-
Множество операций, которые могут выполняться над переменной.
Скалярные типы описывают единственные значения из заданных наборов. Значение структурного типа образуется из некоторого количества значений скалярных типов.
Скалярные типы делятся на порядковые и вещественные.
Порядковые типы переменных включают:
-
Целые типы (integer, cardinal, smallint, word, shortint, byte);
-
Булевский тип (boolean, bytebool, wordbool, longbool);
-
Символьный тип (char, ansichar, widechar).
Кроме указанных выше к порядковым типам относят специальный перечисляемый тип и тип, описывающий заданный диапазон значений.
Переменные вещественного типа (real, single, double, extended, comp, carrency) используют для работы с числами имеющими дробную часть. Во внутреннем представлении мантисса и порядок вещественных чисел хранятся раздельно, причём количество разрядов, отводимых под мантиссу и порядок, регламентируется типом числа.
Совместимыми считаются:
-
Все целые типы;
-
Все вещественные типы;
-
Диапазон некоторого базового типа и базовый тип;
-
Два диапазона одного базового типа;
-
Символ и строка.
Операции над переменным:
-
Арифметические операции (@, not, *, /, div, mod, and shr, shl, +, -, or, xor, <, >...);
-
Основные стандартные математические функции (abs, sqr, sqrt, pi, sin, cos...);
-
Логические операции (and, or, xor, not);
Операции преобразования типов: Trunc, round, ord, chr...
Билет 3 Основные операторы Delphi Pascal: присваивание, условный оператор, оператор выбора и операторы циклов. Синтаксис операторов, их особенности и примеры использования.
С помощью оператора присваивания в программе кодируются действия, связанные с изменением значений переменных. При выполнении этого оператора вычисляется выражение, записанное в правой части, и его результат заносится в переменную, имя которой указано слева. Если оператор присваивания используется в последовательности операторов, то после него ставится точка с запятой.
Для корректного выполнения операции присваивания результат выражения и переменная, записанная в правой части оператора присваивания, должны иметь одинаковые или совместимые типы.
Совместимыми считаются:
-
Все целые типы;
-
Все вещественные типы;
-
Диапазон некоторого базового типа и базовый тип;
-
Два диапазона одного базового типа;
-
Символ и строка.
При несовпадении типов правой и левой частей оператора присваивания для совместимых типов автоматически выполняется неявное преобразование.
Условный оператор используют для программирования ветвлений. Условие записывают в виде логического выражения, в зависимости от результата которого осуществляется выбор одной из ветвей: если результат выражения true, то выполняется оператор, следующий за служебным словом then, иначе - за словом else.
Если по алгоритму решения задачи необходимо в ветвях размещать более одного оператора, используют составные операторы, т.е. последовательность операторов, заключённую в операторные скобки begin...end. Операторы последовательности отделяют друг от друга точкой с запятой. Перед else точка с запятой в операторе if не ставится никогда. Альтернатива else всегда относится к ближайшему if.
Оператор выбора используется для реализации нескольких альтернативных вариантов действий, каждый из которых соответствует своим значениям некоторого параметра.
Операторы циклов используют для реализации циклических процессов. В теории программирования выделяют следующие циклы:
-
Счётные (цикл-для);
-
Итерационные (цикл-пока, цикл-до);
-
Поисковые
Цикл-для выполняется, пока переменная-параметр принимает значения в заданном диапазоне с единичным шагом. Переменная цикла должна иметь порядковый тип. Начальное и конечное значения должны принадлежать к тому же типу, что и переменная цикла. Если используется служебное слово to, то при каждом выполнении цикла переменной цикла присваивается следующее значение порядкового типа переменной, если downto - предыдущее.
Условие цикла-пока записывают в виде логического выражения. Оператор тела цикла повторяется, пока условие истинно. Проверка осуществляется на входе в цикл при каждом повторении.
Операторы тела цикла-до повторяется до выполнения условия, условие повторяется на выходе каждый раз после выполнения тела цикла. В отличие от цикла-пока в цикле-до операторы цикла всегда выполняются хотя бы один раз. Кроме того, конструкция цикла-до позволяет записывать в теле цикла произвольное количество операторов, не используя операторные скобки.
Билет 4 Структурные типы данных Delphi Pascal: массивы, строки. Описание, операции над структурами и их элементами.
Массив - это упорядоченная совокупность однотипных данных. Этот тип используют для представления табличных данных. Каждому элементу массива соответствует один или несколько индексов, определяющих положение элемента в массиве.
Тип индекса определяет его допустимые значения. В качестве типа индекса может быть указан любой порядковый тип, кроме Longint и его производных.
В зависимости от типов индексов различают: одномерные, двумерные, трёхмерные и n-мерные массивы. Двумерные массивы обычно называют матрицами. Тип элементов - любой допустимый в Delphi Pascal тип, кроме файла.
Операция с массивом - присваивания. Остальные с элементами массивов.
-
Присваивание массивов заключается в копировании элементов одного массива в другой. Эту операцию можно выполнять только над массивами одного типа. Массивы считаются совпадающими по типу, если они объявлены через запятую с одним описанием типа массива или если вначале объявлен тип массива, а затем объявлены массивы этого типа;
-
Доступ к элементу массива через прямой (указанием индекса) или косвенный доступ (значения индексов находятся в переменных, что позволяет реализовать последовательную обработку элементов массивов);
-
Ввод/вывод массивов осуществляется поэлементно.
Строка - последовательность символов. Максимальная длина строки не должна превышать 255 байт. Объявление переменных строкового типа, так же как и массивов, можно выполнить двумя способами: через var и через type.
Операции над строками:
-
Присваивание строк;
-
Обращение к элементу (прямое, косвенное);
-
Конкатенация (сцепление) строк;
-
Операции отношения - результат определяется по кодам первых различных символов;
-
Ввод/вывод строк.
Общие процедуры и функции: Length, Setlength, Copy.
Процедуры и функции для работы со строками: Pos, delete, concat, lowercase, uppercase...
Билет 5 Структурные типы данных Delphi Pascal: множества, записи. Описание, операции над структурами и их элементами.
Множество - неупорядоченная совокупность неповторяющихся объектов. Базовым типом может быть любой порядковый тип за исключением типов word, smallint, integer, longint. Количество элементов не должно превышать 256.
Конструкторы и инициализация множеств:
-
[] - пустое множество;
-
[2, 3, 5, 7, 11] - множество чисел;
-
['a', 'd', 'f', 'h'] - множество символов;
-
[1, k] - множество чисел, переменная k должна содержать число;
-
[2..100] - множество содержит все целые числа из указанного интервала:
-
[k..2k] - множество, значения которого можно задать выражениями;
-
[red, yellow, green] - множество перечисляемого типа.
Операции:
-
Присваивание;
-
Объединение, пересечение и дополнение;
-
Отношение;
-
Проверка вхождения элемента во множество;
Значения множественного типа нельзя вводить и выводить. Однако можно ввести значения элементов множества и добавить их к множеству, используя операцию объединения множеств. Для вывода элементов в цикле проверяют вхождение во множество всех элементов базового типа и выводят те, которые входят во множество.
Запись - это структура данных, образованная фиксированным числом разнотипных компонентов, называемых полями записи.
В Delphi Pascal определены записи двух типов:
-
с фиксированными полями;
-
вариантные записи.
Операции:
-
Присваивание записей одного типа;
-
Доступ к полям записи;
-
Ввод и вывод записей осуществляется по полям.
Билет 6 Процедуры и функции Delphi Pascal. Способы передачи данных в подпрограмму. Локальные и глобальные переменные, законы «видимости» идентификаторов.
Билет 7 Процедуры и функции Delphi Pascal. Формальные и фактические параметры. Параметры-строки, параметры-массивы.
Билет 8 Процедуры и функции Delphi Pascal. Принципы разработки универсальных подпрограмм. «Открытые» массивы и строки.
Билет 9 Процедуры и функции Delphi Pascal. Принципы разработки универсальных подпрограмм. Нетипизированные параметры, параметры процедурного типа.
Процедуры и функции - самостоятельные фрагменты программы соответствующим образом оформленные и вызываемые по имени (программные блоки). В отличие от процедуры функция всегда возвращает в точку вызова скалярное значение, адрес или строку. Тип возвращаемого результата описывается в заголовке функций.
Из основной программы данные могу быть получены:
-
Неявно - с использованием глобальных констант и переменных;
-
Явно - через параметры.
Глобальные переменные - ресурсы основной программы, область видимости которой является вся программа. Локальные переменные - ресурсы, объявленные в разделе описаний подпрограммы, область видимости которой начинается и заканчивается в блоке подпрограммы.
Если имена глобального и локального ресурсов совпадают, то глобальный ресурс в подпрограмме становится недоступным (перекрывается). Такой способ передачи данных приводит к большому количеству ошибок и жёстко связывает подпрограмму и данные.
При передаче данных через параметры список параметров (формальные) описывается в заголовке подпрограммы. При обращении к подпрограмме для каждого параметра должно быть указано фактическое значение. Формальные и фактические типы должны соответствовать по количеству, типу и порядку.
Передача может осуществляться:
-
По значению (через параметры-значения) - в подпрограмму передаются копии фактических параметров, и никакие изменения этих копий не возвращаются в вызывающую программу;
-
По ссылке (через параметры-переменные и параметры-констатны, которые помечаются служебным словом var и const) - в программу передаются адреса фактических параметров, соответственно все изменения этих параметров в подпрограмме происходят с переменными основной программы.
Структурные типы параметров должны быть предварительно объявлены.
Открытый массив- конструкция описания типа массива без указания типа индексов. Используется только при объявлении формальных параметров. Индексы открытого массива всегда начинаются с 0. Размер можно передать через дополнительный параметр, получить используя функции High и Low.
Для строк, передаваемых в подпрограмму как параметр-переменная, Delphi Pascal осуществляет контроль длины строки. Чтобы избежать его необходимо использовать открытые строки (openstring).
Нетипизированные параметры - параметры-переменные, тип которых при объявлении не указан. Для приведения нетипизированного параметра к определённому типу можно использовать:
-
Автоопределённое преобразование типов;
-
Наложенное описание переменной определённого типа.
Параметры процедурного типа используются для передачи в подпрограмму имен процедур и функций. Значениями переменных процедурных типов являются идентификаторы процедур и функций с соответствующими заголовками.
Билет 10 Модули Delphi Pascal. Структура модуля. Законы видимости идентификаторов. Доступ к «перекрытым» идентификаторам.
Модуль - автономно компилируемая коллекция программных ресурсов, предназначенных для использования другими модулями и программами.
Ресурсы - переменные, константы, описания типов и подпрограммы.
Все ресурсы, определённые в модуле делят на:
-
Внешние - предназначенные для использования другими программами и модулями;
-
Внутренние - предназначенные для использования внутри модуля.
Структура модуля:
Unit <Имя модуля>;
Interface
<Раздел интерфейса> (содержит объявление ресурсов, к которым возможны обращения извне)
Implementation
<Раздел реализации> (содержит описание подпрограмм, объявленных в разделе интерфейса, и описание внутренних ресурсов модуля)
Initialization
<Раздел инициализации> (содержит операторы, которые выполняются до начала основной программы. Может отсутствовать)
Finalization
<Раздел завершения> (содержит операторы, которые выполняются после окончания основной программы. Может отсутствовать)
End.
Имя модуля должно совпадать с именем файла, в котором он описан.
Ресурсы модуля перекрываются ресурсами программы и ранее указанных модулей.
Для доступа к перекрытым ресурсам модуля используют составные имена: <Имя модуля>.<Имя ресурса>
Билет 11 Рекурсия. Особенности программирования. Достоинства и недостатки.
Рекурсия – организация вычислений, при которой процедура или функция обращаются к самим себе. Различают два вида рекурсии подпрограмм:
-
Прямая или явная - характеризуется существованием в теле подпрограммы оператора обращения к самой себе;
-
Косвенная или неявная - образуется при наличии цепочки вызовов других подпрограмм, которые в коечном итоге приведут к вызову исходной (требует предопределения forward).
Каждое обращение к рекурсивной подпрограмме вызывает независимую активацию этой подпрограммы. Совокупность данных, необходимых для одной активации рекурсивной подпрограммы, называется фреймом активации, который включает:
-
копии всех локальных переменных подпрограммы;
-
копии параметров-значений;
-
четырёхбайтовые адреса параметров-переменных и параметров-констант;
-
копию строки результата (для функций типа string);
-
служебную информацию - более 12 байт, точный размер этой области зависит от внутренней организации подпрограмм.
Структура рекурсивной программы: "Операторы после вызова" выполняются после возврата управления из рекурсивно вызванной подпрограммы.
При работе рекурсивных процедур среда незавершенного вызова сохраняется, т.е. запоминается адрес точки прерывания, сохраняются значения переменных, параметров и т.д. Сохранение среды для незавершенных вызовов производится по принципу стека. Таким образом, предложенный рекурсивный алгоритм вычисления факториала неэффективен как с точки зрения временной сложности, так и с точки зрения пространственной сложности.
Использовать рекурсию удобно, например, в тех случаях, когда отказ от нее заставил бы программиста самого организовывать стек для хранения промежуточных результатов. Рекурсия весьма эффективна при работе с графами и древовидными списками. Ее применение часто позволяет давать более прозрачные и сжатые описания алгоритмов, чем это было бы возможно без рекурсии.
Билет 12 Адресация динамической памяти: понятие адреса, операции получения адреса и разыменования. Процедуры получения памяти и освобождения ее.
Указатель - тип данных, используемый для хранения смещений (расстояния от базового адреса до физического). В памяти занимает 4 байта. Различают два типа указателей:
-
Типизированные - адресующие данные конкретного типа;
-
Нетипизированные - не связанные с данными определённого типа (через pointer).
Операции над указателями:
-
Присваивание;
-
Получение адреса (@);
-
Доступ к данным по указателю (разыменовывание) (^) (нетипизированные указатели разыменовывать нельзя);
-
Отношение;
Процедура New - возвращает адрес выделенного участка памяти через параметр-переменную.
Функция New - возвращает адрес выделенного участка памяти. Размер участка памяти определяется базовым типом.
Процедура Dispose - освобождает память по адресу, хранящемуся в указателе
Билет 13 Списковые структуры данных и основные приемы работы с ними: создание элемента, добавление элемента к списку, удаление элемента из списка. Область применения списковых структур данных.
Списком называют динамическую структуру, в которой помимо данных хранятся также адреса элементов. Элемент списка состоит из двух частей: информационной, содержащей данные, и адресной, где хранятся указатели на следующие элементы. В зависимости от количества полей в адресной части и порядка связывания элементов различают:
-
Линейные односвязные - единственное адресное поле содержит адрес следующего элемента или nil;
-
Кольцевые односвязные списки - единственное адресное поле содержит адрес следующего элемента, а последний элемент ссылается на первый;
-
Линейные двусвязные списки - каждый элемент содержит адреса предыдущего и следующего элемента, соответственно первый и последний элементы в соответствующих адресных полях содержат nil;
-
Кольцевые двусвязные списки - каждый элемент содержит адреса предыдущего и следующего элемента, причём в соответствующих адресных полях первый ссылается на последний, а последний на первый;
-
n-связные списки - каждый элемент включает несколько адресных полей, в которых записаны адреса других элементов или nil.
Для описания элементов списка используют записи.
Добавление элемента осуществляется с помощью процедуры new. Формирование списка можно производить по типу стека или очереди. Удаление элемента осуществляется с помощью процедуры dispose.
Использование списков позволяет:
-
работать с произвольным количеством элементов, добавляя и удаляя их по мере необходимости;
-
осуществлять вставку и удаление записей, не перемещая остальных элементов последовательности.
Но:
-
не допускают прямого обращения к элементу по индексу;
-
требуют больше памяти для размещения.
Билет 14 Основы файловой системы: файл, каталог, дисковод, полное имя файла, внутреннее представление информации в файле. Текстовый и нетипизированный файлы. Операции над файлами.
Файл - поименованная последовательность элементов данных (компонентов файла), расположенных, как правило, во внешней памяти. Полное имя файла:
<Имя диска>:<Список имен каталогов>\<Имя файла>.<Расширение>
Так как во внешней памяти хранится большое количество файлов, то для удобства и ускорения работы применяется древовидная структура каталогов. Главным является корневой каталог, не имеющий имени и создаваемый в процессе форматирования диска, в котором могут фигурировать каталоги второго уровня (подкаталоги), каждый из которых может содержать подкаталоги следующего уровня.
Различают два типа файлов: Дисковые и файлы "логические устройства". Дисковый файл представляет собой поименованную область внешней памяти на устройстве хранения информации. Физически операции ввода-вывода с файлами выполняются с использованием специального буфера, что позволяет существенно повысить скорость выполнения операций.
В отличие от дисковых файлов с логическими устройствами операции ввода-вывода осуществляются только последовательно, так как при выполнении операций вывода-вывода данные передаются покомпонентно.
Доступ к компонентам файла осуществляется через указатель файла.
При выполнении операции чтения или записи указатель автоматически перемещается на следующий компонент.
Файловые переменные делятся на:
-
Типизированные;
-
Текстовые (используют для работы с текстами, представленными в виде строк и переменной длины);
-
Нетипизированные (применяют для скоростного обмена между внешней и оперативной памятью физическими записями указанной длины без преобразования и обработки).
Работа с файлом включает:
-
Инициализацию файловой переменной (assign, assignfile);
-
Открытие файла (reset, rewrite, append);
-
Обработку компонентов файла (создание, модификация, поиск записей);
-
Закрытие файла (close, closefile).
Стандартные процедуры и функции: rename, erase, eof, ioresult, truncate, chdir, getdir, fileage...
В текстовом файле компоненты заканчиваются маркером конца строки (#13, #10). Текстовые файлы используют для хранения и обработки символов, строк, символьных массивов. Логические и числовые данные при записи в текстовые файлы должны преобразовываться в символьные строки. Текстовый файл можно открыть для записи, чтения и добавления записей в конец. Файл, открытый для записи, не может использоваться для чтения и наоборот. Функции и процедуры: eoln, read, readln, write, writeln, seekeoln, seekeof.
Операции чтения и записи с нетипизированными файлами осуществляются блоками, что позволяет организовать высокоскоростной обмен данными между диском и памятью. Отсутствие типа делает эти файлы совместимыми с любыми другими. Нетипизированные файлы, как и типизированные, допускают организацию прямого доступа. Открытие можно осуществить при помощь recsize. Процедуры и функции: blockread, blockwrite...
Билет 15 Типизированные файлы: внутреннее представление информации в файле, особенности обработки. Файловая переменная. Операции над файлом.
Файловые переменные делятся на:
-
Типизированные;
-
Текстовые (используют для работы с текстами, представленными в виде строк и переменной длины);
-
Нетипизированные (применяют для скоростного обмена между внешней и оперативной памятью физическими записями указанной длины без преобразования и обработки).
Работа с файлом включает:
-
Инициализацию файловой переменной (assign, assignfile);
-
Открытие файла (reset, rewrite, append);
-
Обработку компонентов файла (создание, модификация, поиск записей);
-
Закрытие файла (close, closefile).
Стандартные процедуры и функции: rename, erase, eof, ioresult, truncate, chdir, getdir, fileage...
Типизированный файл - это файл, все компоненты которого одного типа , заданного при объявлении файлов переменной. Компоненты файла хранятся на диске во внутреннем (двоичном) формате и нумеруются с 0.
Типизированный файл можно открыть для записи и чтения. Файл, открытый для записи, может использоваться для чтения. В файл, открытый для чтения, можно писать.
Так как размер компонентов одинаков, принципиально возможен не только последовательный, но и прямой доступ.
Процедуры и функции: read, write, seek, filesize, filepos...
Билет 16 Классы консольного режима Delphi: описание классов, поля и методы, объявление объектов класса, доступ к полям и методам объекта, ограничение доступа.
Билет 17 Классы консольного режима Delphi: Способы инициализация полей. Неявный параметр Self.
Класс - это структурный тип данных, который включает описание полей данных, а также процедур и функций, работающих с этими полями данных. Применительно к классам такие процедуры и функции получили название методов, а переменные - полей. Переменные типа класса обычно называют объектами.
Согласно общим правилам языка программирования объект-переменная должен быть: создан, инициализирован, уничтожен.
Методы построения классов:
-
Наследование - механизм, позволяющий строить класс на базе более простого посредством добавления полей и определения новых методов. При этом исходный класс, на базе которого выполняется построение, называют родительским или базовым, а строящейся класс - потомком или производным классом. Если при наследовании какие-либо методы переопределяются, то такое наследование называется полиморфным.
-
Композиция – механизм, позволяющий включать несколько объектов других классов в конструируемый.
-
Наполнение – механизм, позволяющих включать указатели на объекты других классов в конструируемый