- •Введение в object pascal
- •Лекция 1. Интегрированная Среда и Состав языка Object Pascal
- •1.1 Работа с окнами
- •1.2 Редактирование в Object Pascal
- •1.3 Команды меню
- •1.4 «Горячие» клавиши в Object Pascal
- •1.5 Состав языка
- •1.5.1 Алфавит и ключевые слова
- •1.5.2 Идентификаторы
- •1.5.3 Знаки операций, разделители, выражения и операторы
- •Лекция 2. Описательная часть программы
- •2.1 Структура программы
- •2.2 Описание констант
- •2.3 Описание и использование меток
- •2.4 Комментарии
- •Лекция 3. Описание переменных
- •3.1 Структура раздела описания переменных
- •3.2 Классификация типов данных
- •3.2.1 Целочисленные типы
- •3.2.2 Логический тип
- •3.2.3 Символьный тип
- •3.2.4 Вещественные типы
- •3.3 Описание типов пользователя
- •Лекция4. Выражения
- •4.1 Порядок выполнения операций
- •4.2 Выражения целого типа
- •4.3 Вещественные выражения
- •4.4 Логические выражения
- •Лекция 5. Программы Линейной структуры
- •5.1 Операторы ввода (Read, Readln)
- •5.2 Операторы вывода (Write, Writeln)
- •5.2.1 Форматирование численных значений
- •5.2.2 Вывод строковых, символьных и логических значений
- •5.2.3 Вывод вещественных значений в экспоненциальном формате
- •5.2.4 Расположение данного в поле вывода. Примеры
- •5.3 Оператор присваивания
- •5.4 Составной оператор
- •5.5 Стандартные процедуры и функции
- •5.5.1 Понятие процедуры и функции
- •5.5.2 Описание некоторых стандартных процедур и функций
- •5.5.3 Примеры программ линейной структуры
- •Лекция 6. Операторы ветвления (выбора)
- •6.1 Оператор ветвления if
- •6.2 Оператор множественного выбора (варианта) - case
- •Лекция 7. Операторы организации циклов
- •7.1 Цикл типа for
- •7.1.1 Прямая форма оператора for
- •7.1.2 Обратная форма оператора for
- •7.1.3 Советы для начинающих и примеры
- •7.2 Цикл типа While
- •7.3 Цикл типа Repeat... Until
- •7.4 Дополнительные операторы при программировании циклов
- •7.4.1 Досрочный выход из цикла - break
- •7.4.2 Переход к следующей итерации цикла - continue
- •Лекция 8. Массивы
- •8.1 Одномерные массивы
- •8.2 Сортировка одномерного массива
- •8.3 Массивы с большей размерностью
- •8.4 Констант-массивы
- •8.5 Генератор случайных чисел
- •8.5.1 Описание функции Random
- •8.5.2 Применение случайных чисел при работе с массивами
- •Лекция 9. Строки
- •9.1 Строковый тип
- •9.2 Операции над строками
- •Лекция 10. Записи и множества
- •10.1 Запись
- •10.2 Множества
- •11 Пользовательские процедуры и функции
- •11.1 Описание функции и процедуры
- •11.2 Понятие формальных и фактических параметров
- •11.3 Способы передачи параметров в подпрограмму через заголовок
- •11.4 Область видимости идентификаторов
- •12 Файлы
- •12.1 Основные понятия
- •12.2 Типизированные файлы
- •12.3 Текстовые файлы
11.2 Понятие формальных и фактических параметров
При работе с функциями и процедурами следует различать формальные и фактические параметры.
Формальные параметры - это переменные, используемые при описании подпрограммы в её заголовке, а фактические - это те параметры, которые мы передаем подпрограмме при ее вызове. Количество, порядок и типы формальных и фактических параметров должны совпадать. Примеры:
function sin(x: Real): Real;
Здесь переменная х использована для описания заголовка функции, поэтому мы говорим, что этот параметр формальный.
…………….
t:= sin(3.14);
…………….
В этом фрагменте параметр 3.14 используется в выражении при вызове функции, значит это фактический параметр.
………….
t:= sin(u);
…………..
Последний пример отличается от предыдущего только тем, что на месте числового значения стоит переменная. Переменная и - фактический параметр. В общем случае в качестве фактического параметра может быть константа, переменная или выражение соответствующего типа.
Задача: Написать функцию для возведения целых чисел в натуральную степень.
program р11_1;
Var k : integer; { Описание переменных головной программы }
{ Описание функции: хn }
function Istep(x, n: integer) : Longint; { заголовок функции }
{ формальные параметры: x - целое число, n - натуральная степень }
var
i: integer;
p: Longint ;
begin
p:= x;
for i:= 2 to n do p:= p * x;
Istep:= p; { значение функции присваиваем её идентификатору }
end;
{ Тело головной программы }
Begin
Writeln ('3 в кубе=' , Istep (3, 3)); { в этом операторе при обращении к
функции Istep оба фактических параметра равны 3 }
k := 5;
Writeln ('5 в шестой степени=', Istep (k, 6)); { в этом операторе при
обращении к функции Istep первый фактический
параметра равен переменной k, второй -6 }
Writeln ( Istep (k, 6 mod k +1)); { в этом операторе при обращении к
функции Istep первый фактический параметра равен переменной k,
второй - арифметическому выражению целого типа }
end.
11.3 Способы передачи параметров в подпрограмму через заголовок
Связь между головной программой (то есть программой, которая обращается к другой подпрограмме) и подпрограммой (процедурой или функцией) осуществляется через список параметров, указанный в заголовке. Если внутри подпрограммы не требуется изменять значение параметра, то в подпрограмму из головной программы передаётся копия этого параметра. Такой способ передачи параметра называется передачей по значению. В примерах предыдущего пункта передача параметров осуществляется как раз по значению.
Если необходимо изменить значение переданного параметра внутри подпрограммы, то в заголовке перед именем параметра или списком параметров ставится служебное слово Var. Такой способ передачи переменных называется передачей по ссылке. В этом случае в подпрограмму передаётся адрес переменной, что позволяет использовать переменную внутри подпрограммы и при необходимости изменять её значение, которое становится её новым значением как внутри подпрограммы, так и в головной программе.
Необходимо уяснить следующее:
- на месте фактического параметра, в случае передаче его по ссылке, в строке вызова подпрограммы может быть записана только переменная, запись константы или выражения приведет к ошибке;
- переданный по ссылке фактический параметр, изменившись в подпрограмме, вернется измененным в головную программу.
Пример:
procedure GetDate(var Year, Month, Day, DayOfWeek: Word);
В процедуре GetDate параметры Year, Month, Day, DayOfWeek передаются по ссылке, так как эти переменные вычисляются внутри процедуры и являются результатом ее работы. При вызове данной процедуры фактическими параметрами могут быть только переменные. В обратном случае вызов процедуры приведет к ошибке.