
- •Билет 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. Деревья общего вида.
Билет 35. Процедурный тип. Передача процедур и функций в качестве параметра.
Основное назначение процедурных типов – дать программисту гибкие средства передачи функций и процедур в качестве фактических параметров обращения к другим процедурам и функциям.
Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускается ее имя, например:
Type
Proc1 = Procedure (var a, b);
Func1 = Function: string;
Итак, существует два процедурных типа: тип-процедура и тип-функция. Pascal не позволяет объявлять функции, возвращающие значения процедурного типа; результат функции должен быть String, Real, Integer, Char, Boolean, Pointer или перечисление.
В программе могут быть объявлены переменные процедурных типов:
var p1: Proc1;
f1, f2: Func1;
Переменным процедурных типов допускается присваивать в качестве значений имена соответствующих подпрограмм. После такого присваивания имя переменной становится синонимом имени подпрограммы.
Так как процедурные типы допустимы в любом контексте, то можно объявить процедуры или функции, параметрами которых являются процедуры или функции.
Например, программа выведения 2 таблиц различных арифметических операций:
type Func = function(X, Y: Integer): Integer;
function Add(X, Y: Integer): Integer; far;
begin
Add := X + Y;
end;
Function Multiply(X, Y: Integer): Integer; far;
begin
Multiply := X * Y;
end;
procedure PrintTable(W, H: Integer; Operation: Func);
var X, Y: Integer;
begin
for Y := 1 to H do
begin
for X := 1 to H do Write(Operation(X,Y ) : 5);
Writeln;
end;
Writeln;
end;
begin
PrintTable(10, 10, Add);
PrintTable(10, 10, Multiply);
end.
Параметры процедурного типа особенно полезны в ситуациях, когда над множеством процедур или функций выполняются общие действия. В нашем случае процедура PrintTable представляет общее действие, выполняемое над функциями Add и Multiply.
Билет 36. Рекурсия.
Объект называется рекурсивным если он содержит сам себя или определен при помощи самого себя. Пример – определение факториала.
Мощность рекурсии связана с тем, что она позволяет определить бесконечное множество объектов с помощью конечного высказывания. Точно также бесконечные вычисления можно описать с помощью конечной рекурсивной программы, даже если эта программа не содержит явных циклов. Рекурсивные алгоритмы часто используются в тех случаях когда решаемая задача или вычисляемая функция или обрабатываемая структура данных определены с помощью рекурсии. Необходимое и достаточное средство для рекурсивного представления программ – это описание подпрограмм, т. к. оно позволяет присваивать какому-либо оператору имя с помощь которого можно вызвать этот оператор. Если процедура содержит явное обращение самой к себе, то он называется пряморекурсивной. Если про-ра Р содержит обращение к процедуре А, которая содержит (прямо или косвенно) обращение к про-ре Р, то пр-ра Р называется косвенно рекурсивной. Следо-но использование рекурсии не всегда видно из текста программы.
Пример 1. Вычислить факториал n!
Function Factorial (n: integer): integer;
Begin if n=0 then Factorial:=1
else Factorial:=n* Factorial(n-1)
End.
Пример 2. Пример косвенной рекурсии. Определить чётность/нечётность количества знаков в последовательности.
function iseven (m: string): boolean;
begin if isempty(m) then iseven:=true
else iseven:= isodd (rest(m))
end;
function isodd (m: string): boolean;
begin if isempty(m) then isodd:=false
else isodd:= iseven (rest(m))
end;
С процедурой принято связывать некоторое множество локальных объектов, т.е. переменных, констант, типов и процедур, которые определены локально в этой процедуре, а вне её не имеют смысла.