Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
заоч_метод_2 сем.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Тема 2.6 Подпрограммы: процедуры и функции

При создании сложной программ возникает необходимость декомпозиции (разделении) ее на подзадачи. Тurbo Pascal имеет различные средства для деления программы на части. На верхнем уровне (больших задач) – это модули, на нижнем уровне (элементарных подзадач) – это процедуры и функции.

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

Например: Readln(x), Delete(St, 5, 2)

Функция предназначена для вычисления какой-либо скалярной (простой) величины. Имя функции может входить в выражение как операнд. В теле функции имени функции хотя бы раз должно быть присвоено значение.

Например: Ord(‘F’), Sqrt(a+b)

Все процедуры и функции языка Тurbo Pascal делятся на две группы:

  • встроенные (стандартные) - хранятся в стандартных библиотечных модулях ;

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

Описание подпрограммы-процедуры

Procedure Имя (Список формальных параметров); {Заголовок процедуры}

Label

Const {раздел описаний локальных (внутренних) данных}

Typе

Var

Procedure

Function

Begin {операторы процедуры}

. . .

End;

Описание подпрограммы-функции

Function Имя (Список формальных параметров):тип результата; {Заголовок функции}

Label

Const {раздел описаний локальных ( внутренних) данных}

Type

Var

Procedure

Function

Begin {операторы функции}

…

Имя:= выражение;

End;

где

Procedure , Function – служебные слова;

Имя – имя пользовательской процедуры/функции;

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

Например: type ff=array[1..5,1..10] of real;

Procedure Max( s:ff; k,n:integer);

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

Например: Function Factorial (x:byte) :real;

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

Например: Procedure Kol ( st:string[100]; var k1,k2:integer; var L:Boolean);

Выходные параметры

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

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

  • количество формальных и фактических параметров должно быть одинаковым;

  • должен совпадать порядок следования параметров;

  • должны совпадать их типы.

Классификация способов передачи параметров (формальных):

        1. по механизму передачи:

  1. передача по значению – value;

  2. передача по адресу (ссылке) – adr;

        1. по взаимодействию вызываемой и вызывающей подпрограмм:

  1. только как входной параметр- in (input);

  2. только как выходной параметр – out (output);

  3. как входной и как выходной параметр – inout (input|output).

Язык Pascal поддерживает 3 способа передачи параметров: value-in (параметры значения), adr-in (параметры-константы), adr-inout (параметры-переменные).

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

  2. Перед параметрами-константами (adr-in) в списке формальных параметров ставится служебное слово Const. В ячейки памяти формального параметра, выделенные при вызове подпрограммы, передается копия адреса фактического параметра. По имеющемуся адресу разрешено только считывать значение фактического параметра, а изменять запрещено. В качестве фактических параметров нельзя использовать файловый тип данных.

  3. Перед параметрами-переменными (adr-inout) в списке формальных параметров ставится служебное слово Var. В ячейки памяти формального параметра, выделенные при вызове подпрограммы, передается копия адреса фактического параметра. По имеющемуся адресу разрешено считывать значение фактического параметра и изменять их. Измерение значений в ячейках памяти фактических параметров происходит во время выполнения операторов подпрограммы. В качестве фактических параметров можно использовать любой тип данных.

Например:

Type ff=file of real;

massiv= array[1..20,1..30] of char;

. . .

Procedure poisk ( Const a:massiv; n,k:integer; Var x:ff );

параметры- параметры- параметры-

константы значения переменные

Процедура Exit( ) – используется для досрочного выхода из подпрограммы.

Например:Описать функцию, определяющую первое отрицательное число в массиве.

Type mas=array[1..100] of real;

Function minus ( Const b:mas; n:integer) : real;

Var i:integer; {описание локальных данных}

Begin

minus:=0; {функции присваивается значение}

For i:=1 to n do

If b[i]<0 then begin

minus:=b[i]; {функции присваивается значение}

Exit {досрочное завершение функции}

end;

end;

Пример 1: Используя подпрограмму вычисления факториала вычислить биноминальный коэффициент для натуральных чисел n и m.

С использованием подпрограммы-процедуры Fact

Program z1;

Var n,m:integer;

C,P,Fn,Fm: real;

{процедура нахождения факториала числа х}

Procedure fact(x:integer; var p:real);

Var i:integer; {локальные данные}

Begin

P:=1;

For i:=1 to x do

P:=P*i{p-результат выполнения процедуры}

End;

{операторы головной программы}

Begin

Writeln(‘введите n, m’);

Readln(n,m);

Fact(n,Fn); {Fn -факториал числа n}

Fact(m,Fm); {Fm- факториал числа m}

Fact(n-m,P); { p- факториал числа n-m}

C:=Fn/(Fm*P);

Writeln(‘биноминальный коэффициент =’, C:8:1)

End.

С использованием подпрограммы-функции Factor

головная

Ввод n,m

C=Factor(n) /

(Factor(m)*Factor(n-m))

конец

Program z2;

Var n,m:integer;

C: real;

{функция нахождения факториала числа х}

Function factor(x:integer):real;

Var i,p:integer; {локальные данные}

Begin

P:=1;

For i:=1 to x do

P:=P*i;

Factor:=p {функции присваивается значение}

End;

{операторы головной программы}

Begin

Writeln(‘введите n, m’);

Readln(n,m);

C:=Factor(n) / (Factor(m)*Factor(n-m));

Writeln(‘биноминальный коэффициент =’, C:8:1)

End.