
- •Содержание
- •Тема 1. Основные понятия
- •1.2. Задача, алгоритм, программа
- •1.2.Структура модуля исходного кода
- •Тема 2. Линейный блок: оператор присваивания, переменная, процедура и функция
- •2.1 Линейный блок
- •2.2. Переменные и константы
- •Синтаксис объявления переменной в ObjectPascal
- •Синтаксис объявления именной константы в ObjectPascal
- •Синтаксис объявления переменных в VisualBasic
- •2.3Типыпеременныхиконстант
- •Var1: type definitions;
- •Var2, var3: type definition4;
- •Var4 : typel;
- •2.4. Простые типы данных
- •2.4.1. Порядковые типы
- •Поддиапазонные типы
- •Перечислимые типы
- •Операции над порядковыми типами
- •2.4.2. Целые переменные
- •Integer Shortint Smallint Longint Byte Word Cardinal
- •Физические целые типы
- •Логические целые типы
- •2.4.3. Вещественные переменные
- •Вещественные типы.
- •2.4.4. Строковые переменные
- •2.4.5. Булевы типы
- •Размеры переменных булевых типов
- •2.5. Процедуры и функции
- •Описание и вызов процедуры
- •Описание и вызов функции
- •Передача параметров
- •2.6 Область видимости переменных, констант, процедур и функций
- •2.7 Стандартные функции
- •Функции преобразования типов
- •Математические функции
- •Функции вещественных типов
- •Функции обработки строк
- •Строковые функции
- •2.8 Операции над данными
- •2.9 Приоритеты операций
- •2.10. Структурные типы
- •2.10.1. Записи
- •1: Variantnamel: varianttype3;
- •2, 3: Variantname2: varianttype4;
- •1: (KinfWorker: String[15];
- •2: (PosAdmin: String[20]);
- •2.10.2. Массивы
- •Var ИмяМассива: array [ТипИндекса1, ...., ТипИндексаN] of БазовыйТип
- •Var MyArray: Array [1..10] of Integer;
- •2.10.3. Множества
- •Var MyAlphaSet: CharSet;
- •2.10.4. Файловый тип
- •2.11. Указательные типы
- •Средства работы с указателями
- •2.12. Процедурные типы
- •2.13. Тип variant
- •Тема 3. Блок принятия решений: операторы ветвления
- •3.1 Оператор if
- •If условие1 then
- •3.3Операторcase
- •Тема 4. Цикличекий блок: операторы повторяющихся действий
- •4.1.Цикл for
- •4.2. Циклы while и repeat
- •4.3. Операторы break и cont inue
- •Тема 5. Работа с текстовыми файлами
- •5.1. Типы доступа к текстовым файлам
- •5.2. Текстовые файлы
- •5.2.2 Бинарные файлы
- •Id : String[12];
- •Тема 6. Работа с классами
- •6.1. Понятие класса
- •6.2. Классы в object pascal
- •6.3. Свойства класса
- •Способ глобальных и локальных переменных
- •Способ процедуры свойств
- •Создание и удалениеобъектов
- •Inherited Create;
- •Inherited Destroy;
- •6.4. Методы класса
- •6.5. Объявление и удаление объектов
- •Литература
Описание и вызов функции
В функцию можно передать произвольное количество параметров, однако возвращает она всегда одно значение. С другой стороны, функция (как и процедура) может возвращать информацию в вызывающую подпрограмму посредством списка параметров. Обычно функция используется, когда в вызывающую подпрограмму нужно возвратить одно значение.
Синтаксис объявления функции имеет вид
function ИмяФункции(Аргумент1 :тип1; ....) : ТипФункции;
[объявление_локальных_переменных; ]
begin
[операторы; ]
ИмяФункции : =Возвращаемое_Значение;
end;
Для вызова функции (как и процедуры) в коде вызывающей подпрограммы должно быть записано имя функции со списком фактических параметров. Отличие вызова функции от вызова процедуры состоит в том, что функция возвращает значение, ее имя фактически является переменной, содержащей возвращаемое значение. Поэтому вызов функции можно располагать в любом месте, в котором может находиться какая-либо переменная. Например, вызов функции может быть расположен в правой (но не в левой!) части оператора присваивания:
ИмяПеременной := Имя_Функции(CписокФактичПараметров) ;
Пример, оформим подпрограмму Adder() в виде функции, а не процедуры:
//Функция Adder() возвращает сумму чисел numl и num2
function Adder(numl: Real; num2: Real): Real;
begin
Adder := numl + num2;
end;
Программа тестирования функции Adder () имеет следующий вид:
//Сложение двух введенных пользователем чисел
Var
rFirstNum: Real;
rSecjndNum: Real;
rSumma : Real;
begin
rFirstNum =2;
rSecondNum =7;
rSumma := Adder(rFirstNum, rSecondNum,);
end;
Обратите внимание: функция всегда определяется с конкретным типом ТипФунщии. Этот тип будет иметь значение, возвращаемое функцией в вызывающую подпрограмму, извращаемое значение может быть присвоено имени функции в произвольном месте блока функции, причем произвольное количество раз. Возвращено будет то значение, которое было присвоено имени функции в последний раз перед выходом из нее.
Передача параметров
Фактические параметры (точнее, значения фактических параметров) — это информация, передаваемая в подпрограмму. При вызове подпрограммы формальные параметры принимают значения фактических. Каждому формальному параметру должен соответствовать один из фактических параметров. В ObjectPascalпри работе с фактическими и формальными параметрами необходимо учитывать ряд требований.
1. Количество фактических параметров должно быть точно равно количеству формальных параметров.
2. Важна последовательность расположения параметров. Первый фактический параметр соответствует первому формальному параметру, второй — второму и т.д.
3. Соответствующие формальные и фактические параметры должны быть совместимыми по типам.
4. Имена формальных и фактических параметров могут никак не соответствовать друг другу.
5. Способ передачи параметров может быть выполнен по ссылке или по значению
Как и в языке VB, в Object Pascalпараметры передаются или по ссылке, или по значению. При передаче по ссылке в подпрограмму передается адрес ячейки, в которой хранится значение фактического параметра. Поэтому вызываемая подпрограмма имеет доступ к фактическому параметру и может изменять его значение. В то же время при передаче по значению в подпрограмму передается только значение фактического параметра, либо его копия. Следовательно, подпрограмма не имеет доступа к самому фактическому пар метру и не может изменить его значение.
По умолчанию в Object Pascalпараметры передаются по значению. Чтобы передать параметр по ссылке, нужно в заголовке подпрограммы перед его именем расположить ключевое словоVar.