
- •Билет 2 Лексическая структура языка Pascal.
- •Билет 3 Структура Pascal-программы. Составной оператор. Константы. Переменные.
- •Билет 4. Концепция переменной языка паскаль.
- •Билет 5 Концепция типа данных языка Pascal.
- •Билет 6 Простые типы.
- •Билет 7 Стандартные типы языка Pascal.
- •Билет 8 Тип Boolean
- •Билет 9 Перечисляемый тип.
- •Билет 10. Ограниченные типы (диапазоны).
- •Билет 11 Условный оператор
- •Билет 12 Оператор варианта
- •Билет 13 Оператор цикла с постусловием
- •Билет 14 Оператор цикла с предусловием
- •Билет 15 Оператор цикла с параметром
- •Билет 16 Составные типы
- •Билет 17 Массивы, примеры использования
- •Билет 18 Записи, примеры использования
- •Билет 19 Оператор сцепления
- •Билет 20 Записи с вариантами
- •Билет 21 Множества (определение, примеры, операции).
- •Билет 22 Представления множеств, примеры использования.
- •Билет 22. Представления множеств.
- •Билет 23 Файловые типы
- •Билет 24 Операции с файлами
- •Билет 25 Текстовые файлы
- •Билет 26 Типизированные файла
- •Билет 27 Нетипизированные файлы
- •Билет 28 Процедуры и функции
- •Билет 29 Описание процедур и функций
- •Билет 30 Локальные и глобальные переменные
- •Билет 31 Параметры процедур и функций
- •Билет 32 открытые параметры.
- •Билет 33. Нетипизированные параметры.
- •Билет 34. Необходимость и преимущества модульного программирования. Структура модуля в языке Pascal.
- •Билет 35. Процедурный тип. Передача процедур и функций в качестве параметра.
- •Билет 36. Рекурсия.
- •Билет 37. Рекурсия и итерация.
- •Билет 38. Линейный поиск.
- •Билет 39. Поиск делением пополам.
- •Билет 40. Сортировка.
- •Билет 41. Сортировка простыми включениями.
- •Билет 42. Сортировка бинарными включениями
- •Билет 43. Сортировка простым выбором.
- •Билет 44. Сортировка простым обменом(пузырек).
- •Билет 45. Шейкер-сортировка.
- •Билет 46. Сортировка шелла.
- •Билет 47. Сортировка с разделением(быстрая сортировка).
- •Билет 48. Ссылочные типы.
- •Билет 49. Динамические структуры данных.
- •Билет 50. Создание и уничтожение динамических переменных.
- •Билет 51. Связные списки.
- •Билет 52. Связные списки. Создание очередного элемента. Просмотр списка.
- •Билет 53. Добавление компонента в середину списка.
- •Билет 54. Исключение компонент из середины списка.
- •Билет 55. Рекурсивная обработка списка.
- •Билет 56. Двусвязные кольца.
- •Билет 57. Деревья. Двоичные деревья. Двоичные деревья поиска.
- •Билет 58. Добавление узла к двоичному дереву поиска.
- •Билет 59. Поиск в двоичном дереве.
- •Билет 60. Просмотр двоичного дерева.
- •Билет 61. Удаление из дерева.
- •Билет 62. Деревья общего вида.
Билет 32 открытые параметры.
Открытые параметры — это массивы и строки неопределённой длины. Открытым параметром может стать только параметр–переменная. Возможность работать с открытыми параметрами в подпрограммах появилась в версии Turbo Pascal 7.0.
Открытые массивы
В параметр, который является открытым массивом, можно передавать как аргумент массив любой длины и размерности. Единственное ограничение: типы компонент у этих двух массивов должны совпадать.
В заголовке подпрограммы открытый параметр–массив описывается по следующему шаблону:
var <имя_параметра> : array of <тип_компонентов_массива>
Например, если описано
procedure proc6 (var a : array of Byte);
то аргументом могут стать такие массивы:
a1 : array[1 .. 100] of Byte;
a2 : array[-10 .. 10] of Byte;
a3 : array[1 .. 2, 1 .. 3] of Byte;
Компоненты открытого параметра–массива нумеруются, начиная с нуля — этим достигается единообразие обращения к массивам переменной длины.
Если в качестве аргумента поступил многомерный массив, его компоненты «вытягиваются» в одну строку: сначала все компоненты первой строки массива, затем — второй строки и т. д. Например, если массив а3 имеет значения
1 2 3
4 5 6
то внутри процедуры proc6 параметр а будет иметь уже следующий вид:
1 2 3 4 5 6
причём, компоненты двух массивов будут соотноситься так:
a[0]a[1]a[2]a[3]a[4]a[5]
a3[1, 1]a3[1, 2]a3[1, 3]a3[2, 1]a3[2, 2]a3[2, 3]
Открытые строки
Поскольку строки — это массивы символов, то они тоже могут стать открытыми параметрами. Описывается это следующим образом:
var <имя_параметра> : String
Например:
function func6 (var s : String) : Byte;
Длина такого параметра будет автоматически скорректирована в соответствии с длиной строки–аргумента.
Билет 33. Нетипизированные параметры.
В Borland Pascal допускается использовать параметры, тип которых не указан. Такие параметры могут передаваться в подпрограмму только по ссылке, так как в этом случае в подпрограмму реально передается адрес параметра. Безусловно, для того чтобы подпрограмма могла выполнять какие-либо действия с этим параметром, она должна как-то назначить ему тип. Для приведения нетипизированного параметра к определенному типу можно использовать:
Автоопределенное преобразование типов;
Наложенное описание переменной определенного типа.
При автоопределенном преобразовании типов тип выражения указывают явно, например:
Procedure Proc (Var: а);
b: = Integer (a) + 10;
Для наложения переменной определенного типа используют описание с absolute, например:
Procedure Proc (Var: а);
Var r : real absolute a;
При этом переменная r оказывается в памяти размещенной в том же месте, что и нетипизированный параметр а, и, соответственно, любое изменение r приведет к изменению а.
Билет 34. Необходимость и преимущества модульного программирования. Структура модуля в языке Pascal.
Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний и некоторые исполняемые операторы инициирующей части. Модуль имеет следующую структуру:
UNIT <имя>;
INTERFACE
<интерфейсная часть>
IMPLEMENTATION
<часть реализации (исполняемая часть)>
BEGIN
<часть инициализации (инициирующая часть)>
END.
Заголовок модуля состоит из зарезервированного слова UNIT и следующего за ним имени модуля. Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальным предложением
USES <список модулей>
Интерфейсная часть открывается зарезервированным словом INTERFACE. В этой части содержаться объявления всех глобальных объектов модуля, которые должны стать доступными основной программе и/или другим модулям.
Исполняемая часть начинается зарезервированным словом IMPLEMENTATION и содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты – вспомогательные типы, константы, переменные и блоки, а также метки, если они используются в инициирующей части.
Описанию подпрограммы, объявленной в интерфейсной части модуля, в исполняемой части должен предшествовать заголовок, в котором можно опускать список формальных переменных, т.к. они уже описаны в интерфейсной части. Но если заголовок подпрограммы приводится в полном виде, т.е. со списком формальных параметров и объявлением результата, он должен совпадать с заголовком, объявленным в интерфейсной части.
Инициирующая часть завершает модуль. Она может отсутствовать вместе с начинающим ее словом BEGIN или быть пустой – тогда за BEGIN сразу следует признак конца модуля, т.е. слово END и следующая за ним точка.
В инициирующей части размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее работы.
Не рекомендуется делать инициирующую часть пустой, лучше ее опустить: пустая часть содержит пустой оператор, которому будет передано управление при запуске программы, это часто вызывает проблемы.
Преимущества модульного программирования:
-однажды написанный модуль может использоваться в различных программах, что позволяет не дублировать программный код;
-позволяет придать программе иерархическую структуру, что положительно сказывается на ее восприятии;
-обеспечивает независимость компонент системы, т.е. позволяет их независимую разработку и отладку;
- модули скрывают детали внутренней реализации пр-р или ф-ий(инкапсуляция на уровне модуля – это ограничение доступа).
Для языка Pascal использование модулей необходимо при разработке больших программ из-за существующего ограничения на размер одного программного модуля в 64 килобайта.