Процедуры и функции

Содержание

Слайд 2

Содержание Процедуры Функции Механизм передачи параметров в функции и процедуры Глобальные

Содержание

Процедуры

Функции

Механизм передачи параметров в функции и процедуры

Глобальные и локальные переменные

Формальные и

фактические параметры

Рекурсия

Слайд 3

Подпрограммы: глобальные и локальные переменные Все подпрограммы должны быть описаны в

Подпрограммы: глобальные и локальные переменные

Все подпрограммы должны быть описаны в разделе

описаний. Каждая подпрограмма должна иметь имя.
Информация между основной программой и подпрограммами передается глобальными параметрами (переменными), действующими в любой части программы, имеющими имя, описанное в основной программе.
Внутри подпрограммы могут быть использованы локальные параметры (переменные), – их имена и значения имеют смысл только в пределах границ данной подпрограммы и недоступны вызывающей программе
Слайд 4

Формальные и фактические параметры В описании подпрограмм параметры обозначены только именами,

Формальные и фактические параметры

В описании подпрограмм параметры обозначены только именами, поэтому

их называют формальными. До вызова подпрограммы они не имеют значений. Они лишь резервируют место для фактических параметров, фиксируя их число и тип данных.
Типы фактических параметров:
Параметры-значения показывают, какое значение надо присвоить определенному параметру подпрограммы. После завершения подпрограммы они принимают прежние значения, даже если были изменены в подпрограмме.
Параметры-переменные в подпрограмме становятся на место формальных, могут в ходе исполнения подпрограммы изменить свое значение и сохраняют изменения при выходе из подпрограммы (перед параметрами-переменными стоит ключевое слово Var).
Слайд 5

Процедуры Решение задач

Процедуры

Решение задач

Слайд 6

Описание процедуры Program Pr1; Const … Type … Var … Procedure

Описание процедуры

Program Pr1;
Const …
Type …
Var …
Procedure <имя процедуры>(<список формальных

параметров>);
Описательная часть
Begin
Тело процедуры
End;
Begin

<имя процедуры>(<список фактических параметров>);

end.

При вызове процедуры формальные параметры заменяются фактическими.

Слайд 7

Процедура вычисления суммы двух чисел program pr1; Uses crt; Var a,b,s:real;

Процедура вычисления суммы двух чисел

program pr1;
Uses crt;
Var a,b,s:real;
procedure summa(x,y:real;var z:real);
begin
z:=x+y;
end;
begin
clrscr;
writeln('введите a,b');

readln(a,b);
summa(a,b,s);
writeln(' сумма чисел ',a:3:1,' и ',b:3:1,' = ',s:3:1);
readln; end.

x,y,z – формальные параметры, локальные переменные

a,b,s – глобальные переменные

a,b,s – фактические параметры

х

y

z

a

b

s

Параметры-значения

Параметр-переменная

Слайд 8

Программа перестановки значений переменных a,b,c в порядке возрастания(a program perest; var

Программа перестановки значений переменных a,b,c в порядке возрастания(a

program perest;
var a,b,c: integer;
procedure

swap(var x,y: integer);
var t: integer;
begin
t:=x; x:=y; y:=t;
end;
begin
writeln(‘Введите три числа ');
readln(a,b,c);
if a>b then swap(a,b);
if b>c then swap(b,c);
if a>с then swap(a,с);
writeln(a,' ',b,' ',c);
readln; end.

Найдите ошибку в этом решении. Для этого составьте полную систему тестов.

Измените программу так, чтобы аналогичная задача решалась для четырех переменных

Слайд 9

Программа перестановки значений переменных a,b,c в порядке возрастания(a program perest; var

Программа перестановки значений переменных a,b,c в порядке возрастания(a

program perest;
var a,b,c: integer;
procedure

swap(var x,y: integer);
var t: integer;
begin
t:=x; x:=y; y:=t;
end;
begin
writeln(‘Введите три числа ');
readln(a,b,c);
if a>b then swap(a,b);
if b>c then swap(b,c);
if a>с then swap(a,с);
writeln(a,' ',b,' ',c);
readln; end.
Слайд 10

Для нахождения факториала какой тип переменных целесообразно использовать? Вычислить значение выражения

Для нахождения факториала какой тип переменных целесообразно использовать?

Вычислить значение выражения a:=(3n!+2m!)/(m+n)!


program pr2;
Uses crt;
Var m,n,x,y,z:integer; a:real;
procedure fact(d:integer;var q:integer);
var i:integer;
begin
q:=1;
for i:=1 to d do
q:=q*i;
end;
begin
clrscr;
writeln('введите значения n, m '); readln(n,m);
fact(n,x); fact(m,y); fact(m+n,z);
a:=(3*x+2*y)/z;
writeln('значение выражения при m= ',m:4,' и n= ',n:4,'равно',a:8:3);
readln; end.

N!=1·2·3·…· N

Слайд 11

Ввод вывод элементов одномерного массива Функция Random(X) формирует случайное число от

Ввод вывод элементов одномерного массива

Функция Random(X) формирует случайное число от 0

до Х целого или вещественного типа (перед обращением к функции ее необходимо инициализировать, использовав процедуру Randomize). Если параметр Х не задан, результат будет типа Real в пределах от 0.0 до 1.0.
Для получения массива целых случайных чисел из диапазона [A,B] random(B-A+1)+A

Задание: Оформить ввод элементов одномерного массива с помощью генератора случайных чисел (диапазон значений от -10 до 20) и вывод элементов как процедуры.

Для А=-10 В=20 random(20-(-10)+1)+(-10)

Слайд 12

Ввод и вывод элементов одномерного массива

Ввод и вывод элементов одномерного массива

Слайд 13

Функции Решение задач

Функции

Решение задач

Слайд 14

Описание функции Функции предназначены для того, чтобы вычислять только одно значение,

Описание функции

Функции предназначены для того, чтобы вычислять только одно значение,
1. поэтому

ее первое отличие состоит в том, что процедура может иметь новые значения у нескольких параметров, а функция только одно (оно и будет результатом).
2. Второе отличие заключается в заголовке функции. Он состоит из слова FUNCTION, за которым идет имя функции, затем в круглых скобках идет список формальных параметров, после чего через двоеточие записывается тип результата функции.
3. В теле функции обязательно должен быть хотя бы один оператор присвоения, где в левой части стоит имя функции, а в правой – ее значение.

Function <имя>(<список формальных параметров>):<тип результата>
Описательная часть
Begin
Тело функции
<имя>:=<значение>;
End;

Слайд 15

Вычислить значение выражения a:=(3n!+2m!)/(m+n)! program fn2; Uses crt; Var m,n:integer; a:real;

Вычислить значение выражения a:=(3n!+2m!)/(m+n)!

program fn2;
Uses crt;
Var m,n:integer; a:real;
function fact(d:integer) :longint;

var i:integer; q:longint;
begin
q:=1;
for i:=1 to d do
q:=q*i;
fact:=q;
end;
begin
clrscr;
writeln('введите значения n, m '); readln(n,m);
a:=(3*fact(n)+2*fact(m))/fact(m+n);;
writeln('значение выражения при m= ',m:4,' и n= ',n:4,'равно',a:8:3);
readln; end.
Слайд 16

Составить программу, которая будет находить аb, то есть b-ю степень числа

Составить программу, которая будет находить аb, то есть b-ю степень числа

А, где А и В – это целые числа и В>0, вводимые с клавиатуры.

Составьте программу, заменив функцию процедурой

program pr2;
Uses crt;
Var a,b:integer;
c:longint;
Function stepen(x,y:integer):longint;
var i:integer; s:longint;
begin
s:=1;
for i:=1 to y do
s:=s*x;
Stepen:=s;
end;

begin
clrscr;
writeln('введите значения a, b'); readln(a,b);
C:=stepen(a,b);
writeln('s=',s);
readln;
end.

Слайд 17

Механизм передачи параметров в функции и процедуры Разбор заданий

Механизм передачи параметров в функции и процедуры

Разбор заданий

Слайд 18

Механизм передачи параметров в функции и процедуры Что будет напечатано процедурой,

Механизм передачи параметров в функции и процедуры

Что будет напечатано процедурой, а

что программой?

Глобальные переменные

Локальные переменные

a

b

3

3

-3

Адрес с

a

b

c

48

Адрес с
A:=b+3
B:=3*a
C:=a+b

Состояние С

24

5

8

Ответ

Слайд 19

Механизм передачи параметров в функции и процедуры Что будет напечатано функцией,

Механизм передачи параметров в функции и процедуры

Что будет напечатано функцией, а

что программой?

Глобальные переменные

Локальные переменные

c

b

0

0

Адрес a

c

b

d

3

0
a:=2
B:=b+1
D:=3

Состояние a

3

0

2

d

0

0

f:=d

Ответ

f

3

c:=b-a

Слайд 20

Механизм передачи параметров в функции и процедуры Определите результат выполнения предложенной программы. Ответ

Механизм передачи параметров в функции и процедуры

Определите результат выполнения предложенной программы.

Ответ

Слайд 21

Механизм передачи параметров в функции и процедуры Определите результат выполнения предложенной программы. Ответ

Механизм передачи параметров в функции и процедуры

Определите результат выполнения предложенной программы.

Ответ

Слайд 22

Механизм передачи параметров в функции и процедуры Определите результат выполнения предложенной программы. Ответ

Механизм передачи параметров в функции и процедуры

Определите результат выполнения предложенной программы.

Ответ

Слайд 23

Рекурсия Примеры задач

Рекурсия

Примеры задач

Слайд 24

Понятие рекурсии Подпрограммы в Turbo Pascal могут обращаться к самим себе.

Понятие рекурсии

Подпрограммы в Turbo Pascal могут обращаться к самим себе. Такое

обращение называется рекурсией. Объект, который частично определяется через самого себя, называется рекурсивным. Рекурсивные определения как мощный аналитический аппарат используются во многих областях науки, особенно в математике. Для того, чтобы не было бесконечного обращения подпрограммы к самой себе, требуется наличие некоторого условия (условного оператора) в тексте программы, по достижении которого дальнейшее обращение не происходит. Таким образом, рекурсивное программирование может включаться только в одну из ветвей условного оператора, присутствующего в подпрограмме.

Подпрограмма <имя>(<список формальных параметров>): Описательная часть
Begin

if <условие> then < обращение к подпрограмме <имя>>
else <операторы>;

End;

if <условие> then <операторы>
else < обращение к подпрограмме <имя>>;