
- •Билет 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. Деревья общего вида.
Билет 29 Описание процедур и функций
ОПИСАНИЕ ПРОЦЕДУР
Процедура - это независимая именованная часть программы, которую можно вызвать по имени для выполнения определенных действий т.е. процедура это вспомогательная программа (подпрограмма).
Структура описания процедуры, почти такая же как и структура самой программы:
PROCEDURE [имя][параметры];
[необязательный оператор USES];
[раздел описания];
BEGIN
[команды];
END;
[имя] - имя процедуры
[параметры] - их не обязательно указывать если их нет, если они есть, то записываются они в таком виде: var [переменная]:[тип].
Примечание: имена констант, переменных, а также переменных описанных в параметрах процедуры могут совпадать с именами констант и переменных основной программы. Даже если имена переменных основной программы и имена переменных процедуры совпадают, то переменные которые находятся в основной программе и переменные которые находятся в процедуре - не зависимы друг от друга.
Под основной программой теперь будем понимать программу, которая находится между операторами BEGIN и END;
Примечание: переменные, которые используются в основной программе, могут также использоваться в процедурах и функциях.
ОПИСАНИЕ ФУНКЦИЙ
Функция - аналогична процедуре, главное отличие функции от процедуры является то, что функция возвращает какое-либо значение.
FUNCTION [имя][параметры]:[тип];
[необязательный оператор USES];
[раздел описания];
BEGIN
[команды];
END;
[имя] - имя функции
[параметры] - их также как и в процедуре не обязательно указывать, если их нет.
[тип] - так как функция возвращает какое-либо значение, то сама функция как и переменая имеет тип.
Примечание: функцию можно вызывать также как и процедуру или в выражениях аналогично переменным.
Билет 30 Локальные и глобальные переменные
Var i:integer;
procedure local;
var i:integer;
begin i:=2; writeln(i); end;
begin i:=1; local; writeln(i); readln end.
В приведенном примере i – имя локальной и глобальной переменной, это две разные переменные. Из процедуры можно ссылаться на любую глобальную по отношению к ней переменную. Если имя некоторой переменной не определено, то в области действия внутри процедуры имеет место новая связь. Глобальные переменные располагаются в сегменте данных, а локальные в стеке. На глобальную переменную можно ссылаться из процедуры. Присваивание локальной переменной внутри арифметического цикла не оказывает на глобальную переменную никакого влияния к глобальной обратиться невозможно.
Билет 31 Параметры процедур и функций
Описание процедуры начинается зарезервированным словом Procedure, за которым следуют имя процедуры и список формальных параметров. Список параметров заключается в круглые скобки и содержит перечень параметров с указанием их типа.
Параметры обеспечивают механизм подстановки, позволяющий повторять некоторый процесс, изменяя его аргументы. Существует соответствие между заголовком и оператором процедуры. Последний содержит список фактических параметров, которые подставляются вместо соответствующих формальных параметров, определенных в описании процедуры. Соответствие устанавливается на основе положения параметров в том и другом списке.
Параметры бывают: 1) параметры-значения; 2) параметры-переменные; 3) параметры-константы.
Параметры-значения. В начале раздела параметров нет никакого служебного слова. Фактические параметры должны быть выражениями (в противном случае переменная, соответствующая формальному параметру представляется в вызываемой процедуре некоторой переменной). В качестве значения этой переменной берется текущее значение соответствующего параметра, т. е. значение выражения в момент обращения к процедуре. После этого процедура может изменить значение текущего параметра. Но на значение соответствующего фактического параметра это не оказывает никакого влияния, следовательно, параметры-значения нельзя использовать в качестве результатов вычисления.
Параметры-переменные. Фактический параметр должен быть переменной. Перед соответствующим формальным параметром должно стоять служебное слово var. Этот формальный параметр представляет фактическую переменную. Во время выполнения процедуры любые действия над формальными параметрами распространяются на соответствующие фактические параметры. Если параметры есть некий результат процедуры, то он должен определяться как параметр-переменная.
При любом обращении к процедуре выделяется место в стеке для каждого параметра-значения. Текущее значение фактического параметра копируется в это место, а при выходе из процедуры это место освобождается. Если параметр не используется для передачи результата процедуры, то предпочтительнее использовать параметр-значение. Обращение к нему идёт быстрее, и есть защита от ошибочного изменения данных. Однако в случае параметра сложного типа (массив) необходимо соблюдать осторожность, т.к. операция копирования большого массив в стек может занять много времени или может произойти переполнение стека. Поэтому были придуманы параметры-константы.
Параметры-константы. Действуют как локальные переменные, которые можно только читать. Получают свое значение из соответствующего фактического параметра. Присвоения ему не разрешаются. Параметр-константа не может быть передан как фактический параметр-переменная в другую процедуру или функцию. Для структурных типов (массив, стринг) компилятор генерирует более эффективный код передачи, чем для параметра-значения.
Зарезервированное слово procedure, имя процедуры и список ее параметров образуют заголовок процедуры. За заголовком следует тело процедуры, содержащее новый раздел описаний и раздел исполняемых операторов.
Нетипизированные параметры. Когда формальный параметр нетипизирован, соответствующий фактический параметр м.б. ссылкой на любой соответствующий параметр или константу. Внутри процедуры (ф-и) нетипизированный параметр не имеет типа, т.е. он не совместим ни с одной переменной, следовательно, он должен получить тип внутри процедуры приведения типов. Когда производится приведение типов переменной, она рассматривается как значение обозначенного типа. Размер переменной (число байт) должен быть таким же, как и размер обозначенного типа. Хотя нетипизированные параметры предоставляют программисту большую гибкость, их рискованнее использовать. Компилятор не может проверить, какие операции допустимы над нетипизированными параметрами.
Открытые параметры позволяют передавать в процедуры (ф-и) строки и массивы переменной длинны. Открытые параметры-строки передаются двумя способами:
1) используя идентификатор OpenString. Он определён в модуле System и определяет специальный тип String;
2) используя ключевое слово String и директиву компилятору {$P+}.
Для открытого параметра-строки действительный параметр м.б. переменной любого стригового типа. Открытые параметры-строки действуют точно так, как параметры-переменные стригового типа, за исключением того, что он не м.б. передан в другую процедуру (ф-ю) как обычный параметр-переменная. Параметры-значения и параметры-константы, объявленные 1м (OpenString) или 2м способом не являются открытыми параметрами-строками. Они ведут себя как параметр String, имеющий максимальную длину 255 символов.
Открытые параметры-массивы. Формальный параметр объявляется следующим образом: array of T. Действительный параметр должен быть переменной-массивом, тип элементов которого Т. Внутри процедуры (ф-и) формальный параметр действует так, будто он объявлен array [0..N-1] of T, где N - число элементов действительного параметра. Формальный открытый параметр-массив м.б. доступен только поэлементно, присвоения целому массиву не разрешаются. Открытый параметр-массив м.б. передан в другую процедуру (ф-ю) только как открытый параметр-массив или как нетипизированный параметр-переменная. В отличие от OpenString, OpenArray можно передавать в другую процедуру (ф-ю) и как параметр-значение, и как параметр-переменную.
Процедурные типы - это нововведение фирмы Borland (в стандартном Паскале таких типов нет). Основное назначение этох типов - дать программисту гибкие средства передачи процедур и функций в качестве фактических параметров обращения к другим процедурам и функциям.
Для объявления процедурного типа используется заголовок процедуры (ф-и), в котором опускается её имя, н-р:
type
p1 = Procedure (a, b, c: real; var d: real);
p2 = Procedure (var a, b);
f1 = Function (var s: string): real;
f2 = Function: string;
Существует два процедурных типа: тип-процедура и тип-функция.
Переменным процедурных типов допускается присваивать в качестве значений имена соответствующих подпрограмм. После такого присвоения имя переменной становится синонимом имени подпрограммы.