max_m(n,a,max,kmax );

Подпрограммы. Функции и процедуры.

Если в программе имеется несколько одинаковых фрагментов, то возникает вопрос: нельзя ли оформить повторяющийся фрагмент в виде отдельного блока, а затем обращаться к нему несколько раз. Аналогичная идея возникает при отладке больших программ – если разбить программу на отдельные блоки, то отладить ее по частям будет проще. На языке Паскаль подпрограммы реализуются в виде функций или процедур.

Функции и процедуры реализуют принципы структурного программирования.

К функциям и процедурам обращаются если необходимо:

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

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

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

 

Структура программы, содержащей процедуру (функцию)

program <имя>;

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

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

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

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

begin

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

end;

begin

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

end.

 

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

Процедуры

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

Первая строка любой процедуры:

 

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

 

<имя> - уникальный идентификатор, строится по правилам составления имен простых переменных;

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

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

 

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

 

<список фактических параметров> - список переменных или констант, разделенных запятыми.

Например:

 

procedure prim(x:real; var s:integer; z,y:integer);

 

Описан заголовок процедуры где:

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

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

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

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

prim (x, s, z, y); ( имена фактических параметров x, s, z,y - совпадают с именами формальных)

или

prim (a, s1, b, 5); ( именами фактических параметров a, s1, b – не совпадают с именами формальных, а последний фактический параметр является числовой константой)

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

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

Задача.

Задан одномерный массив вещественных чисел. Найти максимальный элемент массива и определить его номер.

Составим программу с использованием двух процедур:

· процедура ввода элементов массива;

· процедура поиска максимального элемента и определение его номера.

Для передачи массива в процедуру введем пользовательский тип mas.

Program PP;

Type

mas=array[1..100] of integer; {пользовательский тип}

var { глобальные переменные }

a:mas;

max:real;

n,max,kmax:integer;

procedure input_mas(n:integer ; var a:mas );

var i:integer; {локальная переменная}

Begin

for i:=1 to n do readln(a[ i ]);

End;

procedure max_m(n:integer; a:mas; var max,kmax:integer );

var i:integer;

Begin

max:=a[1];kmax:=1;

for i:=1 to n do

if a[i]>max then

begin max:=a[i]; kmax:=i; end;

End;

Begin

writeln(‘ Введите n<=100’) ; readln( n );

writeln (‘ Введите элементы массива ‘);

Input_mas(n,a);

max_m(n,a,max,kmax );

writeln(‘max=’,max,‘kmax=’,kmax);

Readln;

End.

 

Функции

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

Первая строка любой функции:

 

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

 

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

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

<тип> - тип возвращаемого результата.

Обращение из основной программы к функции возможно в структуре какого либо оператора, например оператора присваивания:

 

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

 

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

 

Задача.

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

n! = 1* 2 * 3 * …* n

 

Program factorial;

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

Var

n,k:integer;

function fun(k:integer):integer;

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

Var

p,i:integer;

Begin

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

p:=1;

for i:=1 to k do

p:=p*i;

fun:=p;

End;

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

Begin

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

Readln(n);

for k: = 1 to n do

writeln(fun(k));

End.

 

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

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

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

Имя функции в теле функции в операторах присваивания может стоять только слева от знака «:=» , поэтому использована дополнительная переменная p для подсчета произведения.

 

 


<== предыдущая лекция | следующая лекция ==>
Публично-правовые образования как субъекты гражданского права | Половое созревание и половая зрелость




Дата добавления: 2017-06-02; просмотров: 289;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.024 сек.