Слайд 1Занятие 3
Процедуры и функции.
Новиков Алексей Константинович
Преподаватель СПК МГППУ
Программирование на Delphi
Слайд 2
Разработанные программистом самостоятельные программные блоки называются подпрограммами пользователя. Они являются основой
модульного программирования.
Слайд 3Достоинства подпрограмм:
Программы, написанные с учетом подпрограмм, легче тестировать и отлаживать,
у них более четкая логическая структура;
Самостоятельный характер подпрограмм позволяет поручать их составление различным программистам;
Использование подпрограмм позволяет экономить память. Память для хранения переменных, использующихся в подпрограмме, выделяется только на время ее работы и высвобождается, как только ее выполнение заканчивается.
Слайд 4
Все процедуры и функции подразделяются на две группы: встроенные и определенные
пользователем.
Встроенные (стандартные) процедуры и функции являются частью языка и могут вызываться по имени без предварительного описания. Их наличие существенно облегчает разработку прикладных программ.
Слайд 6Стандартные функции (продолжение)
Слайд 7Процедура
Процедура - это независимая именованная часть программы, которую после однократного описания
можно многократно вызвать по имени из последующих частей программы для выполнения определенных действий. Процедура не может выступать как операнд в выражении.
Структура процедуры повторяет структуру программы - она также представлена заголовкам и телом. В отличие от программы для процедур и функций наличие заголовка обязательно.
Слайд 8Процедура
Формат:
Procedure ИмяПроцедуры (ФормальныйПараметр1: Тип; ФормальныйПараметр : Тип;…);
Begin
{инструкции исполнительной части программы}
end;
Слайд 9Формат процедуры
Для обращения к процедуре используется оператор вызова процедуры. Он состоит
из имени процедуры и списка фактических параметров, отделимых друг от друга запятыми и заключенных в круглые скобки. Список параметров отсутствует, если процедуре не предается никаких значений.
Формат:
ИмяПроцедуры (ФактическийПараметр1, ФактическийПараметр2,..);
Слайд 10Пример.
Var d: integer; {дюйм}Sm: real; {см}
{процедура для вывода горизонтальной линии}
procedure horline;
Var
i: integer;
Begin
For i: =1 to 30 do write (‘--’);
Writeln;
End;
Слайд 11Пример
{основная программа}
Begin horline;
write ln (‘ дюймы | см
‘),
horline;{считаем и выводим строки таблицы}
for d:=1 to 10 do begin
sm:=2.54*d;
writeln (‘|’, d: 13, ‘|’, sm: 14: 3, ‘|’);
end;
horline; end.
Слайд 12Пример № 2
Усовершенствуем процедуру вывода линии, введя в нее два параметра:
длину выводимой строки и символ, которым рисуется линия.
Procedure horline (l:integer; s: char);
{l--pазмер линии в символах;
s--символ, которым рисуется линия}
Слайд 13Пример № 2
Var i: integer;
Begin
For i:=1 to l do write (s);
Writeln;
End;
{Основная
программа}
Begin
Horline (10,’/’);
Horline (20,’*’);
Horline (30, ‘#’); end.
Слайд 14
Если процедура возвращает в программу какие-то значения, соответствующие переменные должны быть
описаны как параметры-переменные с использованием слова Var.
В таком случае объявление процедур выглядит так:
Слайд 15
Procedure Имя (Var параметр1: тип1; Var параметра2: тип2;… Var параметрК: типК);
Var
//здесь объявление локальных переменных;
begin
//здесь инструкция процедуры
end;
Слайд 16Пример № 3
Запишем процедуру, выполняющую возведение в целую неотрицательную степень любого
члена.
1 Кб = 210 б; 1 Мб = 220 б; 1 Гб = 230 б.
Procedure degree (x: real; n: byte; var res: real)
Процедура возведения числа Х в целую неотрицательную степень N, результатом является параметр переменная res.
Слайд 17
Var i: integer;
Begin res: =1;
For i:=1 to n do res: =res
* x;
End;
{основная программа }
var kb, mb, gb: real;
begin
degree (2,10, kb); degree (2, 20, kw); degree (2, 30, gb);
writeln (kb, mb, gb); end.
Слайд 18Функция пользователя
Если результатом подпрограммы является только одно значение, то имеет смысл
оформить такую подпрограмму не в виде процедуры, а в виде функции. Функция пользователя аналогично процедуре, но имеются два отличия.
Слайд 19Отличия процедуры от функции
Функция передаёт в программу результат своей работы -
единственное значение, носителем которого является имя самой функции.
Имя функции может входить в выражение как операнд. Функция возвращает результат в точку своего вызова.
Слайд 20Формат
Формат:
Function ИмяФункции (ФормальныеПараметры): Тип результата;
{Описательная часть функции}
Begin
{инструкции исполнительной части функции}
ИмяФункции:
= Результат;
End;
Слайд 21
В разделе операторов функции должен находиться хотя бы один оператор, который
присваивает ее имени значение, возвращаемое как результат работы функции. Если таких присваиваний несколько, то результатом выполнения функции будет значение последнего оператора присваивания. Если же такой оператор отсутствует или не был выполнен, то значение, возвращаемое функций, не определено.
Слайд 22Рассмотрим возведения числа в действительную степень.
Function instep (a, b: real): real);
Begin
If
a>0 then instep: = exp(b*ln(a)) else instep: = 0;
End;
{основная программа }
Слайд 23
var a, b, c;: real;
begin
writeln ( ‘Введите положительное основание и показатель
степени);
readln (a,b);
c: = instep (a,b);
if с<>0 then writeln (a, ‘ в степени ’, b, ‘=’, c);
else writeln (‘основание должно быть положительным‘);
end.
Слайд 24Список формальных параметров может включать в себя:
параметры – значения, за
которыми указывается их тип;
параметры – переменные, перед которыми должно стоять служебное слово var и за которыми указывается их тип;
параметры – процедуры
параметры – функции
нетипированные параметры
Слайд 25Например:
Function kvadru (a, b, c: real; var X1, X2: real):
Integer ;
Слайд 26Соответствие между формальными и фактическими параметрами:
формальных и фактических параметров должно
быть одинаковое количество;
порядок следования фактических и формальных параметров должен быть
один и тот же;
тип фактического параметра должен совпадать с типом соответствующего ему формального параметра.
Слайд 27Параметры – значения
используются только для передачи исходных данных из основной
программы в процедуру или в функцию. Если формальный параметр объявлен как параметр-значение, то фактическим параметром может быть произвольное выражение. При вызове подпрограммы фактические параметры вычисляются и используются как начальные значения.
Слайд 28
Каждому формальному параметру, объявленному как параметр – переменная, должен отвечать фактический
параметр в виде переменной соответствующего типа.