- •Программирование на языке Паскаль
- •Содержание
- •Введение. Структура программы. Типы данных
- •Структура программы в зыке Паскаль
- •Комментарии
- •Раздел описания переменных
- •Имена идентификаторов в языке Паскаль
- •Типы данных в языке Паскаль
- •Целые типы
- •Вещественные типы
- •Раздел описания констант
- •Оператор ввода
- •Составной оператор
- •Условный оператор
- •Выражения
- •Арифметические операции
- •Логические выражения
- •Логические операции
- •Приоритеты операций
- •Стандартные математические и арифметические функции
- •Структурированные операторы
- •Оператор выбораCase
- •Оператор циклаFor
- •Оператор циклаWhile
- •Inc(n); { Увеличение значения пременнойnна 1 }
- •Оператор циклаRepeat
- •Пользовательские порядковые и составные типы. Процедуры и функции
- •Раздел описания типов
- •Интервальный тип
- •Перечислимый тип
- •Тип массив
- •Строковый тип
- •Процедуры и функции для работы со строками
- •Типизированные константы
- •Процедуры и функции
- •Обращение к процедурам и функциям
- •Процедуры и функции. Процедурные типы. Тип указатель
- •МодификаторыVar иConst в описании формальных параметров
- •Локальность и область действия
- •Процедурные типы
- •Тип указатель
- •Нулевой указатель
- •Работа с текстовыми файлами. Тип запись. Алгоритмы сортировки
- •Файловые типы
- •Процедуры и функции для работы с текстовыми файлами
- •Стандартные текстовые файлы
- •Тип запись
- •Обращение к элементам записи
- •Алгоритмы сортировки
- •Алгоритмы сортировки
- •Алгоритмы сортировки сравнениями
- •Объектно-ориентированное программирование. Структура программного модуля
- •Тип данных «объект»
- •Тип данных «класс»
- •Классификация стилей программирования
- •Структура программного модуля
- •Основы визуального программирования
- •Элемент управления «Поле ввода»
- •Элемент управления «Кнопка»
- •Элемент «Метка»
- •Элемент «Группа переключателей»
- •0:ShowMessage('Выбран вариант 1');
- •Виды изображений
- •КлассTPicture
- •КлассTBitmap
- •ОператорWith
- •КлассTCanvas
- •Библиографический список
- •620002, Екатеринбург, Мира, 19
Обращение к процедурам и функциям
Синтаксис
Вызов процедур (в исполнительной части в качестве оператора):
<Имя процедуры>[(<Список фактических параметров>)]
Вызов функций (используются в выражениях):
<Имя функции>[(<Список фактических параметров>)]
В списке фактических параметров перечисляются через запятую значения передаваемых в процедуру или функцию параметров. Количество и тип фактических параметров должны соответствовать описанным в заголовке формальным параметрам. При вызове процедуры или функции формальные параметры принимают значения переданных туда фактических параметров.
Пример
PrintNumber(10);
Writeln(Mul(4,7));
PrintNumber(Mul(2,3)+8);
Процедуры и функции. Процедурные типы. Тип указатель
МодификаторыVar иConst в описании формальных параметров
Если не указывать никаких модификаторов, то при передаче фактических параметров в процедуру или функцию создается временная копия значения фактического параметра, которая используется в процедуре или функции и удаляется после выхода. При использовании модификатора VAR в качестве формального параметра передается переменная (точнее ссылка на переменную). Значение переменной, переданной по ссылке, можно изменить внутри процедуры или функции. При этом изменится и значение переменной, указанной в качестве параметра.
Пример
PROCEDURE VectorSum(x1,y1,x2,y2:Real;VAR x,y:Real);
BEGIN
x:=x1+x2;
y:=y1+y2;
END;
VAR x,y:Real;
∙ ∙ ∙
VectorSum(3,7,5,10,x,y);
Результат выполнения
x=8,y=17
Таким образом, можно использовать этот способ передачи параметров, например для возврата процедурой или функцией, если это необходимо, сразу нескольких значений. Заметьте, что в этом случае значения может возвращать и процедура. Существуют случаи, когда передавать переменные по ссылке, а не по значению обязательно. Часто этот модификатор применяется для переменных составных типов (например, строк и массивов).
Модификатор CONST применяется в основном для переменных составных типов в случае, когда значение параметра внутри процедуры или функции изменять не требуется. В этом случае не создается временная копия значений параметров, а, как и при использовании модификатораVAR, переменные передаются по ссылке, что сокращает время на создание копии больших составных переменных. Передавать значения по ссылке допускается, так как можно быть уверенным, что, как и при обычной передаче параметров, значение переменных не изменится. Если попытаться изменить значение параметра, описанного с модификаторомCONST, будет выдано сообщение об ошибке.
Локальность и область действия
Все описания, находящиеся в описательной части процедуры или функции, являются локальными для нее и недоступны в основной программе или в других процедурах и функциях. Переменные, описанные в основной программе, являются глобальными и доступны всем процедурам и функциям. Локальные переменные, в отличие от глобальных, не существуют до вызова процедуры или функции, в которой они описаны. При входе в процедуру или функцию для локальных переменных динамически выделяется память, а при выходе эта память освобождается.
Пример
VAR A,B,C:Integer;
PROCEDURE Test(A:STRING);
VAR
B:Char;
BEGIN
B:='B';
Writeln(A,B,C);
END;
BEGIN A:=1;
B:=2;
C:=3;
Test('Str');
Writeln(A,B,C);
END.
Результат выполнения
StrB3
123
Необходимо заметить, что значения типизированных констант, где бы они ни были описаны, являются глобальными, т.е. если в процедуре или функции описана типизированная константа, то для нее уже выделена память и ей присвоено конкретное значение. Если в процедуре или функции поменять это значение, то при следующем вызове измененное значение типизированной константы сохранится.
Пример
CONST
n:Integer=25;
PROCEDURE Test;
CONST
n:Integer=1;
BEGIN
Writeln('Local n=',n);
Inc(n);
END;
BEGIN
Test;
Test;
Writeln('Global n=',n);
END.
Результат выполнения
Localn=1
Local n=2
Global n=25