Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
21
Добавлен:
10.12.2013
Размер:
50.18 Кб
Скачать

Функции и процедуры.

  • реализуют принципы структурного программирования. К функциям и программам обращаются если необходимо:

  • разделить большую задачу на несколько меньших по объему и сложности задач;

  • уменьшить объем программы за счет выделения типовых программных действий в функции или процедуре;

  • создание программных модулей, которые могут быть использованы и в других программах.

Структура программы. Содержание процедуры, функции.

Program <имя>;

<описательная часть>; (описание глобальных меток, констант, переменных);

procedure <имя процедуры>;

(function <имя функции>;)

<описательная часть процедуры/функции>; (описание локальных меток, констант, переменных)

begin

<исполнительная часть процедуры/функции>;

end;

begin

<исполнительная часть основной программы>

end.

Процедуры/функции - могут содержать  операторы PASCAL. Строятся по тем же правилам, что и основная программа, только текст процедуры/функции заканчивается после end -;

Процедуры.

Procedure <имя> (список формальных параметров);

  • строится по правилам составления имен основных программ;

  • список переменных передающих информацию в процедуру, а результаты - в основную программу.

Обращение к процедуре из основной прогаммы:

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

  • список переменных или констант, разделенных запятыми.

Пример:

Procedure PRIM (x: real; var s: integer; z, y: integer);

x, z, y - передают информацию в процедуру;

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

Чтобы формальный параметр возвращал результат в основную, его необходимо описать словом var.

Обращение к процедуре из основной:

PRIM (x, s, z, y); или (из другого места программы)

PRIM (a, s1, b, 5);

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

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

  • Локальные метки не доступны из основной программы.

  • Глобальные метки - доступны в процедуре.

Функции.

Function <имя > (список фор. Параметров):

<тип результата>;

  • передает информацию в программу-функцию.

  • <имя> - возвращает результат в основную программу.

Обращение из основной к функции:

<переменная>: = <имя> (список фактических переменных);

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

Пример:

Function SUM (x, y: integer): integer;

Обращение к ней из основной

A: =sum (a, b); или

B: =sum (z, 2);

Рассмотрим применение процедур при работе с массивами.

Пример:

Program pr;

type

mas: array [1…10] of integer;

var

i, n: integer;

k: mas;

procedure input _ mas (var k: mas; n: integer);

var

j: integer;

begin

for j:=1 to n do

readln (k[ j ]);

end;

begin

writeln ('введите n'); readln (n);

input _ mas (k, n);

for i:=1 to n do

writeln (k[i]);

end.

j - локальная переменная.

i, n, k - массив - глобальные переменные.

Пример:

Program pr;

Описание

var

a, b, s: integer;

Процедура

procedure summa (var s: integer; a, b:integer);

begin

s: =a+b;

end;

Функция

fnction sum (a, b: integer): integer;

begin

sum: = a+b

end;

Основная программа

begin

a:=10; b:=15;

summa (s, a, b); writeln (s);

s:= sum (a, b); writeln (s);

end.

Директива forward.

Если одна программа использует другую, а та, в свою очередь, использует первую, возникает проблема размещения этих процедур в программе. Какую из них поместить в программе первой? В этих случаях прибегают к директиве forward.

procedure pp1 (a, b: integer); forward;

Первая процедура:

procedure pp2 (c: real);

var x, y: integer;

begin

pp1 (x, y);

end;

Вторая процедура:

procedure pp1;

var

z: real;

begin

pp2 (z);

end;

end.

Задача: составить программу нахождения палиндромов в диапазоне 09999, используя процедуру.

program palindrom;

var

f, i: integer;

procedure two (var f: integer; i: integer);

var

a, b: real;

begin

a: =int (i/10); b:=i-a*10;

if a=b then f:=1;

end;

procedure thr (var f: integer; i: integer);

var

a, c: real;

begin

a:= int(i/100); c:= i-int(i/10)*10;

if a=c then f:=1;

end;

procedure fo (var f: integer; i: integer);

var

a, b, c, d: real;

begin

a: =int (i/100); b: =int((i-a*1000)/100);

c: =int ((i-a*1000-b*100)/10);

d: =i-a*1000-b*100-c*10;

if (a=d) and (c=b) then f=1;

end;

begin

for i=0 then 9999 do

begin

f:=0

case i of

0 .. 9 : f:=1;

10 .. 99 : two (f, i);

100 .. 999 : thr (f, i);

1000 .. 9999 : fo (f, i);

end;

if f=1 then writeln (i);

end;

end.

Задача: составить программу вычисления n! С использованием функции.

program factorial;

Описательная часть основной программы:

var

n, k: integer;

function fac (k: integer): integer;

Описательная часть подпрограммы:

var

p, i: integer

begin

Исполнительная часть подпрограммы:

p:=1

for i:=1 to k do

p: = p*i;

fac: =p;

end;

Исполнительная часть основной программы:

begin

write ('введите n');

readln (n);

for k: = 1 to n do

writeln (fac(k));

end.

n, k - глобальные переменные.

p, i - локальные переменные.

fac - имя "функции", возвращает результат в основную программу. Может в подпрограмме присутствовать в операторах присваивания только слева от знака "=".

Второй вариант задачи вычисления n!

program factorial;

var

n: integer;

function fac (i: integer): integer;

begin

if i=1 then fac: = 1

else fac: = i * fac(i-1);

end;

begin

writeln ('введите n');

readln (n);

writeln ('n! = ', fac(n));

end.

Подпрограмма-функция многократно обращается сама к себе. Вычисление начинается с конца i = n и до i = 1.

Соседние файлы в папке Лекции