Процедуры и функции. Формальные и фактические параметры. Передача параметров по ссылке, по значению и через указатель.
Процедуры и функции. Формальные и фактические параметры. Передача параметров по ссылке, по значению и через указатель. - раздел Программирование, Объектно-ориентированное программирование Процедуры По Своей Структуре Напоминают Независимую Программу, Вложенную В Ос...
Процедуры по своей структуре напоминают независимую программу, вложенную в основную программу. Главное их отличие в том, что они, как правило, имеют параметры, передаваемые из внешнего программного блока кода внутрь процедуры и/или обратно. Кроме того, что после окончания описания процедуры становится не точка, а точка с запятой. Процедуры можно использовать в других процедурах или в поле программы. Допускается вложение одной процедуры в другую. Возможная степень вложения зависит от реализации компилятора PASCAL и, как правило, бывает не менее7.
var x,y,z:extended; {раздел описания переменных программы}
i,k,l:integer; {раздел описания переменных программы}
begin {начало тела программы}
i:=7; k:=2; l:=100;
factorial(x,i);
factorial(y,(k+l)/2-5*i);
{factorial (z+1,l); — так нельзя!}
factorial(z,l); {так можно}
end. {конец тела программы}
Иногда (как в данном случае) гораздо удобнее использовать процедуру-функцию:
program factor2;
function factorial(n:integer):extended; {заголовок функции с
формальным параметром n}
var i:integer; {локальная переменная функции factorial}
x:extended; {локальная переменная функции factorial}
begin
x:=1; {тело функции}
for i:=1 to n do x:=x*i; {тело функции}
factorial:=x;
end;
var x,y,z:extended; {глобальные переменные программы}
i,k,l:integer; {глобальные переменные программы}
{эти x и y совсем не то, что локальные в factorial}
begin
i:=7; k:=2; l:=100;
x:=factorial(i); {вызов1}
y:=factorial((k+l)/2-5*i); {вызов2}
z:=factorial(l); {вызов3}
end.
При описании процедуры (или функции) переменные, описанные в заголовке процедуры — это формальные параметры (в примере fact2 это n для функции factorial). В теле программы при вызове процедуры на соответствующее место надо подставлять фактические (это строка i в вызове1, (k+l)/2-5*i в вызове2, l в вызове3). Если перед формальным параметром стоит зарезервированное слово var — это передача параметра "по ссылке". В этом случае вместо формального параметра подставляется фактическая переменная соответствующего типа, и если в процессе работы процедуры (или функции) должно меняться значение формального параметра, то реально меняется значение этой переменной. После окончания работы процедуры эта переменная сохраняет изменившееся значение. Т.о. через такой параметр можно передавать значения как "внутрь" процедуры, так и "наружу" из нее. В ряде современных языков программирования такой способ передачи параметров описывают как сочетание in ("внутрь") и out ("наружу"). Смысл термина "передача параметра по имени" следующий: при работе процедуры вместо имени формального параметра подставляется имя фактического, и именно с ним проделывается все то, что описано в процедуре.
Второй способ передачи параметров в процедуру или функцию — "по значению", если перед формальным параметром не стоит зарезервированное слово var. В этом случае в программе в качестве фактического параметра можно писать произвольное выражение соответствующего типа (совместимого по присваиванию). Для формального параметра при вызове процедуры создается временная переменная данного типа. Ей присваивается значение выражения, вычисляемое в процессе присваивания (вот почему говорят о передаче параметра "по значению"). Затем с этой переменной выполняются все действия, описанные в процедуре для формального параметра. Перед завершением процедуры временная переменная (ее называют локальной) автоматически уничтожается, поэтому с ее помощью ничего нельзя передать "наружу". Другими словами — это передача параметра типа in. В некоторых других языках программирования (например, ADA), возможна передача параметра типа out. При этом в процедуре такой параметр может стоять только в левой части присваивания, и его нельзя использовать в выражениях в правой части присваивания или в фактических параметрах процедур.
Передача параметра через указатель – это явная передача адреса ячейки. Единственное отличие от передачи по ссылке заключается в том, что для доступа к ячейке внутри подпрограммы требуется ставить символ ^ после имени указателя.
Object PASCAL
(72 часа)
Вадим Валериевич Монахов, доцент кафедры вычислительной физики СпбГУ
Введение
1.1. Основной принцип ст
Алфавит языка PASCAL. Идентификаторы.
Основной алфавит языка PASCAL состоит из латинских букв и цифр.
Буквы:
ABCD...XYZ — заглавные (прописные),
abcd...xyz — строчные,
а также знак _
Арифметические операторы.
Бинарные полиморфные (тип результата определяется по правилам приведения типов,
см. далее):
+ сложение (все целые и вещественные типы, строковые типы, множества).
Логические операторы и операции отношения.
Логические операторы:
and логическое "И". Пример: a and b
or логическое "ИЛИ": a or b
xor логическое "исключающее ИЛИ": a xor b
not
Структура простейшей программы.
В PASCAL любое число пробелов, символов <TAB> или переносов на новую строку везде приводится к одному пробелу (конечно, кроме строковых выражений). Имя файла с текстом программы должно быть т
Простейшие операторы языка Object PASCAL
2.9.1. Пустой и составной операторы.
Операторы в языке PASCAL разделяется символом ";".
Пустой оператор — это просто пустая строка (или эквивален
Классы, экземпляры класса, наследование, иерархия.
Объектный тип (например, tDot) называется классом. Переменная данного типа — объект или, что то же самое, экземпляр класса. То есть при задании
Var dDot:tDot
переменная dDot – это
Правила присваивания. Совместимость типов для объектов.
Для потомков при использовании их "на месте" прародителей любого уровня имеется два основных варианта совместимости типов (по вызовам и по присваиваниям) между:
1. экземплярами о
Очередь, стек, двунаправленный список.
Совершенно аналогичным образом можно создавать объект — двунаправленный список, в котором каждый узел имеет указатели как "влево" (на предыдущий узел), так и "вправо" (на послед
Классы, объекты, поля и методы.
В Object Pascal класс — тип записи, который может иметь в своем составе поля данных и методы (а также свойства, но о них будет отдельный разговор).
Пример описания класса и переменн
Свойства.
В Delphi пожелание ООП "не обращаться из программы к полям, а действовать через методы" нашло отражение в новом для ООП принципе — свойствах объекта.
Свойство определяется
Создание и уничтожение объектов. Конструкторы и деструкторы.
В Object Pascal объекты могут быть только динамическими! Любая переменная объектного типа — это указатель, но доступ к объекту идет без 'шляпки', а создание нового объекта осуществляется не операто
Области видимости объектов.
В Delphi существуют зарезервированные слова public ("общие"), protected ("защищенные") и private ("личные") для определения специальных правил видимости областей кода
Обработка исключительных ситуаций.
Во время работы программы часто встречаются исключительные ситуации: деление на 0, отсутствие места на диске или попытка писать на защищенную для записи дискету, ошибочный символ при вводе (наприме
Специальные средства для работы с MS Windows: сообщения.
Для обработки сообщений Windows в Delphi существует механизм динамических методов, называемых сообщениями. Они должны быть описаны в классе как процедуры, имеющие один параметр, передаваемый по име
События и их делегирование. Обработка событий.
События — это свойства процедурного типа. Их название принято начинать с префикса "on". Для описания события некого типа (как описать новый тип события будет рассказано далее) в объекте н
Методы класса и указатели на класс.
Некоторые методы бывает нужно вызывать без создания экземпляра класса (например, для получения информации о имени класса, размере экземпляра класса и т.п.). Такие методы называются методами класса
Дополнительные возможности Object Pascal.
4.17.4. Функции
а) могут возвращать значения определенных пользователем типов, включая сложные;
б) внутри каждой функции предопределена доступная по чтению и записи локальн
Визуальное проектирование в среде Delphi.
Перед началом работы обычно надо настроить пути к библиотеке Delphi, а в Delphi 3.0 также установить пакеты. Это связано с тем, что Windows 95 (и, тем более, NT 4.0) имеет индивидуальные настройки
Создание экранных форм. Инспектор объектов.
При входе в Delphi автоматически открывается проект "по умолчанию". Изначально это проект с пустой экранной формой, на которой пунктиром показана сетка, к которой идет привязка для выравн
Палитра компонентов.
Мы будем описывать только наиболее важные свойства и события для компонентов и перечислим только наиболее часто используемые компоненты из стандартных библиотек Delphi 3.0. Для Delphi 2.0 практичес
Общие представления об интерфейсах в Object PASCAL
Интерфейс объекта определяют методы и свойства, которые могут быть реализованы классом-наследником этого интерфейса. Они описываются аналогично абстрактным классам, так же, как абстрактные классы,
Особенности разработки DLL
Работа программ с DLL (Dynamic Link Library) поддерживается операционной системой, а не компилятором какого-либо языка программирования. Они представляют собой универсальный механизм использования
ActiveX
Подпроцессы (Threads)
Для создания дополнительного подпроцесса в программах Delphy предназначен специальный модуль (в репозитории он представлен пиктограммой Thread Object
Использование библиотек OpenGL и GLU
5.21. Создание программистом собственного компонента
Литература
1. В.В.Фаронов . Delphi 6. Учебный курс.- М.:"Нолидж", 2001.- 608 с.
Хотите получать на электронную почту самые свежие новости?
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Новости и инфо для студентов