Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

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



 

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 – не совпадают с именами формальных, а последний фактический параметр является числовой константой)

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

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

 

Вложенные процедуры

 

Директива 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;

 

Задача.

 

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

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

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

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

Для передачи массива в процедуру введем пользовательский тип 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 для подсчета произведения.

 

 




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

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.