Слайд 1Программирование
на языке Паскаль
Подпрограммы
© К.Ю. Поляков, 2006-2009
Слайд 2При разработке программы иногда появляются повторяемые группы действий или возникает
необходимость расчленить программу на функциональные модули, сделать ее структуру иерархической.
Для этого во всех языках программирования используют подпрограммы.
Подпрограмма — это специальным образом оформленный алгоритм, который может многократно использоваться при решении более общей задачи.
Слайд 3
В Паскале подпрограмма является частью основной программы, ее описание располагается
между разделом var главной программы и ее программным блоком (первым
begin).
Подпрограмм может быть несколько, их описания располагаются в произвольном порядке одно за другим.
В Паскале различают два вида подпрограмм: процедуры и функции. Основное различие между ними заключается в том, что процедура получает в результате своей работы любое количество данных, а функция — только одно значение.
Слайд 4Объявление переменных
Глобальные переменные - переменные, объявленные в основной программе, доступны
всем операторам программы, а так же операторам процедур и функций.
Локальные
переменные - переменные, объявленные в процедуре или функции. Они доступны только операторам процедур или функций.
Слайд 5Программирование
на языке Паскаль
Процедуры
© К.Ю. Поляков, 2006-2009
Слайд 6Процедуры
Procedure (список формальных параметров);
const
type
var
begin
;
end;
Вызов процедуры
– это упоминание ее имени в тексте основной программы.
Могут быть
опущены
Слайд 7Процедуры
Особенности:
все процедуры расположены выше основной программы
в заголовке процедуры перечисляются формальные
параметры, они обозначаются именами, поскольку могут меняться
при вызове процедуры в
скобках указывают фактические параметры (числа или арифметические выражения) в том же порядке
procedure Tr( x, y, r, g, b: integer);
Tr (200, 100, 0, 255, 0);
x
y
r
g
b
Слайд 8Процедуры
Особенности:
для каждого формального параметра после двоеточия указывают его тип
если однотипные
параметры стоят рядом, их перечисляют через запятую
Пример
procedure A (x: real;
y: integer; z: real);
procedure A (x, z: real; y, k, l: integer);
procedure A (x, z: real; var l: real);
Переменные, которые используются в формуле
Переменная, в которую записывается результат
Слайд 9Процедуры
Особенности:
в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не
имеют к ним доступа
program qq;
procedure A(x, y: integer);
var
a, b: real;
begin
a := (x + y)/6;
...
end;
begin
...
end.
procedure A(x, y: integer);
var a, b: real;
begin
a := (x + y)/6;
...
end;
локальные переменные
var a, b: real;
Слайд 10Параметры-переменные
Задача: составить процедуру, которая меняет местами значения двух переменных.
Особенности:
надо, чтобы
изменения, сделанные в процедуре, стали известны вызывающей программе
program qq;
var x,
y: integer;
begin
x := 1; y := 2;
Exchange ( x, y );
writeln ( ’x = ’, x, ’ y = ’, y );
end.
procedure Exchange ( a, b: integer );
var c: integer;
begin
c := a; a := b; b := c;
end;
эта процедура работает с копиями параметров
x = 1 y = 2
Слайд 11Программирование
на языке Паскаль
Функции
© К.Ю. Поляков, 2006-2009
Слайд 12Функции
Функция – это вспомогательный алгоритм (подпрограмма), результатом работы которого является
некоторое значение.
3 категории функций:
стандартные функции (abs(x), sqrt(x),
sqr(x), sin(x), cos(x), и т.д.);
функции программиста (объявлять свою собственную функцию и в дальнейшем использовать её так же как и стандартную);
библиотечные функции (стандартные библиотечные модули).
Слайд 13Функции
Зачем?
для выполнения одинаковых расчетов в различных местах программы
для создания
общедоступных библиотек функций
Слайд 14Структура функции
В разделе операторов должен находится, хотя бы один оператор,
присваивающий имени функции значение.
Слайд 15Функции
Задача: составить функцию, которая вычисляет наибольшее из двух значений, и
привести пример ее использования
Функция:
формальные параметры
function Max (a, b: integer): integer;
begin
if a > b then Max := a
else Max := b;
end;
это результат функции
Слайд 16Функции
Особенности:
заголовок начинается словом function
формальные параметры описываются так же, как и
для процедур
можно использовать параметры-переменные
в конце заголовка через двоеточие указывается тип
результата
функции располагаются ВЫШЕ основной программы
Слайд 17Функции
Особенности:
можно объявлять и использовать локальные переменные
значение, которое является результатом, записывается
в переменную, имя которой совпадает с названием функции; объявлять ее
НЕ НАДО:
Слайд 18Программа
program qq;
var a, b, max: integer;
begin
writeln('Введите два числа');
read(a,
b);
max := Max ( a, b );
writeln('Наибольшее число
', max );
end.
function Max (a, b: integer): integer;
begin
...
end;
c
c
c
фактические параметры
вызов функции
Слайд 19Найти S и P треугольника, вершины которого заданы координатами
(x1, y1)
(x3,
y3)
(x2, y2)
L1
L2
L3
полупериметр
Слайд 20Решаем используя Процедуру
var x1,y1,x2,y2,x3,y3:real;
P,S,PP,l1,l2,l3:real;
Procedure
dl(a,b,c,d:real; var l:real);
begin
l:=sqrt(sqr(a-c)+sqr(b-d));
end;
begin
read(x1,y1,x2,y2,x3,y3);
dl(x1,y1,x2,y2,l1);
dl(x2,y2,x3,y3,l2);
dl(x3,y3,x1,y1,l3);
P:=l1+l2+l3;
PP:=P/2;
S:=sqrt(PP*(PP-l1)*(PP-l2)*(PP-l3));
writeln(P:10:2,S:10:2);
end.
Слайд 21Решаем используя Функцию
var x1,y1,x2,y2,x3,y3:real;
P,S,PP,l1,l2,l3:real;
function
dl(a,b,c,d:real):real;
begin
dl:=sqrt(sqr(a-c)+sqr(b-d));
end;
begin
read(x1,y1,x2,y2,x3,y3);
l1:=dl(x1,y1,x2,y2);
l2:=dl(x2,y2,x3,y3);
l3:=dl(x3,y3,x1,y1);
P:=l1+l2+l3;
PP:=P/2;
S:=sqrt(PP*(PP-l1)*(PP-l2)*(PP-l3));
writeln(P:10:2,S:10:2);
end.
Слайд 22Решаем используя Процедуру
var k,a,f1,s:integer;
procedure fact(n:integer; var f:integer);
var i:integer;
begin
f:=1;
for i:=1 to n do
f:= f*i;
end;
begin
read(k);
a:=2;
while a<=k do
begin
fact(a,f1);
s:=s+f1;
a:=a+2;
end;
writeln(s);
end.
Слайд 23Решаем используя Функцию
var k,a,f1,s:integer;
function fact(n:integer):integer;
var f,i:integer;
begin
f:=1;
for i:=1 to n
do
f:= f*i;
fact:=f;
end;
begin
read(k);
a:=2;
while a<=k do
begin
f1:=fact(a);
s:=s+f1;
a:=a+2;
end;
writeln(s);
end.