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

Содержание

Слайд 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;
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('

Процедура вычисления суммы двух чисел program pr1; Uses crt; Var a,b,s:real; procedure
сумма чисел ',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: integer;
procedure swap(var

Программа перестановки значений переменных a,b,c в порядке возрастания(a program perest; var a,b,c:
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: integer;
procedure swap(var

Программа перестановки значений переменных a,b,c в порядке возрастания(a program perest; var a,b,c:
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

Для нахождения факториала какой тип переменных целесообразно использовать? Вычислить значение выражения a:=(3n!+2m!)/(m+n)!
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) формирует случайное число от 0 до

Ввод вывод элементов одномерного массива Функция 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. поэтому ее

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

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

Слайд 15

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

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

Вычислить значение выражения a:=(3n!+2m!)/(m+n)! program fn2; Uses crt; Var m,n:integer; a:real; function
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 < обращение к подпрограмме <имя>>;