267.38K
Category: programmingprogramming

Основы алгоритмизации и программирования. Turbo Pascal процедуры и функции

1.

Основы алгоритмизации и программирования
TURBO PASCAL
ПРОЦЕДУРЫ
И
ФУНКЦИИ

2.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
При решении сложных объемных задач часто
целесообразно разбивать их на более простые.
Метод последовательной детализации позволяет составить
алгоритм из действий, которые сами представляют собой
достаточно самостоятельные алгоритмы.
Использование подпрограмм позволяет сделать
основную программу более наглядной, понятной, короткой
и эффективной.
В языке Pascal существует два вида подпрограмм:
процедуры и функции, определяемые программистом.
Процедуры и функции имеют один и тот же смысл и
аналогичную структуру, различаются назначением и
способом их использования.

3.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Процедура – это независимая именованная часть
программы, которую можно вызвать по имени для
выполнения определенных действий.
Процедуры служат для задания совокупности
действий, направленных на изменение внешней по
отношению к ним обстановки (например,
определение новых значений переменных).
Процедуры не могут выступать как операнд в
выражении.

4.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Формат описания процедуры:
Procedure <Имя процедуры> (<Имя формального параметра 1>:<Тип>;
<Имя формального параметра 2>:<Тип>;?);
<Раздел описаний>;
Begin
<Тело процедуры>
End;
Список параметров может отсутствовать, это значит, что значения
извне не передаются:
procedure proc1;
function func1: boolean;
Фактические параметры или аргументы – это значения, которые
передаются в программу

5.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Примеры использования процедур:
Program pr1;
procedure err(c:byte; s:string);
var zz: byte;
begin
if c = 0 then
writeln(s)
else
writeln('Ошибка!');
end;
var
n:byte;
begin
readln(n);
err(n,’krona’);
end.

6.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Примеры использования процедур:
Расположить в порядке неубывания три целых числа.
Program Pr1;
Var S1, S2, S3 : Integer;
{Процедура Smena с
Procedure Smena (Var A, B: Integer); параметрами-переменными}
Var C: Integer; {С – независимая локальная переменная}
Begin
C:= A; A := B; B := C; {Меняем местами содержимое А и В}
End;
Begin
Writeln (‘Введите три числа');
Readln (S1, S2, S3);
If S1>S2 Then Smena(S1, S2);
If S2>S3 Then Smena(S2, S3);
If S1>S2 Then Smena(S1, S2);
Writeln(‘Числа в порядке неубывания:', S1, S2, S3);
End.

7.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Примеры использования процедур:
Вывести на экран положительное число (вводимое с клавиатуры) или
прервать программу если число отрицательное.
Program Pr2;
var k, chislo: integer;
p ro c e d u re A b o r t ( M s g : st r i n g ) ; {Процедура Abort с параметром Msg (от Message
- сообщение)}
begin
Wr i te l n ( ' О ш и б ка : ' , M s g ) ;{Выводится сообщение «Ошибка» и текст,
указываемый в теле программы}
end;
p ro c e d u re Pe c h a t ( a : i n te ge r ) ;
begin
Wr i te ( a : 5 ) ;
end;
Begin
Writeln ('Введите число');
Read (Chislo);
if chislo > 0 then Pechat (chislo) else Abort ('Число отрицательное');
end.

8.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Смысл функции – в определении алгоритма
вычислений нового значения некоторого типа.
Функция (в отличие от процедуры) передает в
точку вызова какое-то скалярное значение.
Функция может входить в выражение как операнд.

9.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Формат описания функции:
Function <Имя функции> (<Имя формального параметра 1>:<Тип>;
<Имя формального параметра 2>:<Тип>;?) :
<Тип результата>;
<Раздел описаний>;
Begin
<Тело функции
<Имя функции> := <Выражение>;
>
End;

10.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Примеры использования функции:
Найти максимальное из трех введенных чисел.
{Функция Max с формальными
Program Pr3;
параметрами
Var A, B, C : Real;
K и N (можно использовать А и В),
Function Max (K, N : Real) : Real; которая принимает значение типа
Real}
Begin
if K > N Then Max := K Else Max := N;
end;
Begin
Writeln ('Vvedite 3 chisla');
Readln (A, B, C);
Writeln ('Naibolchee chislo', Max (Max(A, B),C));
End.

11.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Примеры использования функции:
Function Power (a,b:real):real;
Begin
If a>0 then Power:=exp(b*ln(a))
Else if a<0 then Power:=exp(b*ln(abs(a)))
Else if b=0 then Power:=1
Else Power:=0
End;

12.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Примеры использования функции:
Найти значение выражения:
а а
с с
2
2
р р
2
Program Pr4;
var fun: Real;
function primer (x: integer): Real;
begin
primer := (sqrt(x)+x)/2;
end;
procedure pechat (a: Real);
begin
write (a:5:2);
end;
Begin
fun := primer (4) + primer (9) + primer (16);
pechat (fun);
end.

13.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Возвращаемые значения
Функции и процедуры отличаются количеством
возвращаемых ими значений.
Функция, завершив работу, возвращает ровно
одно значение, тип которого явным образом
указывается при объявлении функции.
Результат возвращает специальная "переменная",
имеющая имя, совпадающее с именем самой
функции.
В теле функции обязательно должен
присутствовать оператор присваивания значения
этой переменной.

14.

Например:
function min(a,b: integer): integer;
begin
if a>b then
min:= b
else
min:= a
end;
Процедуры в отличие от функций явно не
возвращают никаких значений.

15.

Вызов процедур и функций
Процедура или функция может быть вызвана не только из
основного тела программы, но и из любой другой
процедуры или функции, объявленной позже нее.
При вызове в процедуру или функцию передаются
фактические параметры или аргументы (в круглых скобках
после имени подпрограммы, разделенные запятыми):
<имя_подпрограммы>(<список
_аргументов>)

16.

Аргументами могут быть переменные, константы и
выражения, включающие в себя вызовы функций.
Количество и типы передаваемых аргументов должны
соответствовать количеству и типам ее параметров.
Тип каждого аргумента должен учитывать способ
подстановки, указанный для соответствующего
параметра.

17.

Вызов функции
не может быть самостоятельным оператором, потому что
возвращаемое значение нужно куда-то записывать. Но
может быть частью выражения. Например:
c:= min(a,a*2);if min(z, min(x,y))= 0 then...;
Вызов процедуры
является самостоятельным оператором,
так как процедура не возвращает значения. Например:
err(res,'Привет!');

18.

После того, как вызванная процедура или функция
завершит свою работу, управление передается
оператору, следующему за оператором, вызвавшим
процедуру или функцию.

19.

1-й способ подстановки. Параметр-значение
В списке параметров подпрограммы перед параметромзначением служебное слово отсутствует. Например, функция
func3 имеет три параметра-значения:
function func3(x:real; k:integer; flag:boolean):real;
При вызове подпрограммы параметру-значению может
соответствовать аргумент, являющийся выражением,
переменной или константой, например:
dlina:= func3(shirina/2, min(a shl 1,ord('y')), true)+0.5;

20.

Механизм передачи значения
В области памяти, выделяемой для работы вызываемой
подпрограммы, создается переменная с именем
<имя_подпрограммы>.<имя_параметра>,
В эту переменную записывается значение аргумента,
переданного в соответствующий параметр.
Все действия в подпрограмме выполняются именно над этой
новой переменной.
Значение же входного аргумента не затрагивается.
Поэтому после окончания работы подпрограммы, значение
аргумента останется точно таким же, каким оно было
на момент вызова подпрограммы.

21.

Пример:
function func3(x:real; k:integer; flag:boolean):real;
При вызове func3(1+a/2,a,true) будут выполнены следующие
действия:
- созданы временные переменные func3.x, func3.k, func3.flag;
- вычислено значение выражения 1+а/2 и записать его в
переменную func3.x;
- записано в переменную func3.k значение переменной а;
- записано в переменную func3.flag значение константы true;
- произведены действия, описанные в теле функции;
- уничтожены все временные переменные, в том числе func3.x,
func3.k, func3.flag.
В итоге значения аргументов не изменятся.

22.

2-й способ подстановки. Параметр-переменная
В списке параметров подпрограммы перед параметромпеременной ставится служебное слово var.
Например, процедура proc3 имеет три параметра-переменные и
один параметр-значение:
procedure proc3(var x,y:real; var
k:integer;flag:boolean);
При вызове подпрограммы параметру-переменной может
соответствовать только аргумент-переменная;
не константа и не выражение.

23.

Механизм передачи значения
В отличие от параметра-значения, для параметра-переменной
не создается копии при вызове подпрограммы.
В работе подпрограммы участвует та самая переменная,
которая послужила аргументом. Если ее значение
изменится в процессе работы подпрограммы, то это
изменение сохранится и после того, как будет уничтожен
контекст подпрограммы.

24.

3-й способ подстановки. Параметр-константа
В списке параметров перед параметром-константой ставится
служебное слово const.
Например, процедура proc4 имеет один параметрпеременную и один параметр-константу:
procedure proc4(var k:integer; const flag:boolean);
При вызове процедуры параметру-константе может
соответствовать аргумент, являющийся выражением,
переменной или константой.

25.

Во время выполнения подпрограммы соответствующая
переменная считается обычной константой.
При вызове другой процедуры или функции из тела текущей
параметр-константа не может быть подставлен в
качестве аргумента в параметр-переменную.

26.

Области действия имен.
Глобальные объекты - это типы данных, константы и
переменные, объявленные в начале программы до
объявления любых подпрограмм.
Эти объекты будут видны во всей программе, в том числе
и во всех ее подпрограммах. Глобальные объекты
существуют на протяжении всего времени работы
программы.

27.

Локальные объекты объявляются внутри какой-нибудь
подпрограммы и "видны" только этой подпрограмме и
тем подпрограммам, которые были объявлены внутри
нее.
Локальные объекты не существуют, пока не вызвана
подпрограмма, в которой они объявлены, а также после
завершения ее работы.

28.

Совпадение имен
Каждому локальному имени неявно приписано имя
подпрограммы, в которой оно объявлено.
Поэтому совпадение глобальных и локальных имен не
вызывает ошибки.
Тем не менее совпадения имен рекомендуется избегать.

29.

Если имеются глобальная и локальная переменные с
одинаковым именем, то из подпрограммы к глобальной
переменной можно обратиться, приписав к ней имя
программы:
<имя_программы>.<имя_гл
обальной переменной>
Например:
a:= prog.a;
(локальной переменной будет присвоено значение
глобальной)

30.

КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Что такое процедуры и функции?
2. Как в программе объявить процедуру?
3. Как в программе объявить функцию?
4. Может ли описание процедуры или
функции быть отложено?
5. Что такое формальные и что такое
фактические параметры?
6. Чем отличаются процедуры от функций?

31.

7. Как функция возвращает значение?
8. Как в программе может вызываться
процедура и как функция?
9. Какие существуют способы подстановки
аргументов?
10. Что такое глобальные и что такое
локальные объекты?
11. Могут ли совпадать имена глобальных и
локальных переменных?

32.

ПРОЦЕДУРЫ И ФУНКЦИИ В PASCAL
Информацию по теме «Процедуры и
функции» можно получить:
Семакин И. Г., Шестаков А. П. «Основы программирования»:
Учебник. Стр. 71.
Попов В. Б. «Turbo Pascal для школьников» : Учеб. пособие.
Стр. 132.
English     Русский Rules