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

Лекция 10_pr.ppt

  • Количество слайдов: 11

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

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

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

Описание процедуры имеет вид: procedure <имя> (<список формальных параметров>); <раздел описаний> begin <операторы> end; Описание процедуры имеет вид: procedure <имя> (<список формальных параметров>); <раздел описаний> begin <операторы> end; Описание функции имеет вид: function <имя> (<список формальных параметров>): <тип возвращаемого значения>; <раздел описаний> begin <операторы> end;

Операторы подпрограммы, заключенные в операторные скобки begin/end, образуют тело этой подпрограммы. Список формальных параметров Операторы подпрограммы, заключенные в операторные скобки begin/end, образуют тело этой подпрограммы. Список формальных параметров вместе со скобками может отсутствовать. Он состоит из одной или нескольких секций, разделенных символом "; ". Каждая секция состоит из списка переменных, перечисляемых через запятую, после которого следуют двоеточие и тип. Каждая секция может предваряться служебным словом var, что указывает на то, что параметры передаются по ссылке. Действие ключевого слова var распространяется на ближайшую группу переменных одного типа, например Procedure p 1 (var b, c: real; d: real); b, c –параметры-переменные, d – параметр-значение.

Раздел описаний процедуры или функции Этот раздел устроен так же, как и раздел описаний Раздел описаний процедуры или функции Этот раздел устроен так же, как и раздел описаний основной программы. Здесь описываются локальные переменные и константы, типы, а также вложенные процедуры и функции. Все такие локальные объекты доступны лишь внутри данной подпрограммы и не видны извне. Пример описания процедуры: procedure Reverse(var a: array [1. . 100] of integer; n: integer); var i, v: integer; begin for i: =1 to n div 2 do begin v: =a[i]; a[i]: =a[n-i+1]; a[n-i+1]: =v; end;

Внутри тела функции имя этой функции можно использовать как специальную переменную, которой необходимо присвоить Внутри тела функции имя этой функции можно использовать как специальную переменную, которой необходимо присвоить возвращаемое значение, например: function Add(a, b: real): real; begin Add: =a+b; end; Имя функции может быть использовано с целью возврата значения только в левой части оператора присваивания. Если имя функции встречается в выражении, то это трактуется как рекурсивный вызов этой функции.

Вместо имени функции, внутри тела функции можно использовать другую специальную переменную с именем Result. Вместо имени функции, внутри тела функции можно использовать другую специальную переменную с именем Result. В отличие от имени функции, переменную Result можно использовать и в выражениях, например: function Min. Element(var a: array [1. . 100] of real; n: integer): real; var i: integer; begin Result: =a[1]; for i: =1 to n do if a[i]

Параметры процедур и функций Параметры, указываемые при описании подпрограммы, называются формальными. Параметры, указываемые при Параметры процедур и функций Параметры, указываемые при описании подпрограммы, называются формальными. Параметры, указываемые при вызове подпрограммы, называются фактическими. Если формальный параметр описан со служебным словом var, то его называют параметром-переменной и говорят, что он передается по ссылке. Если же параметр описан без слова var, то его называют параметромзначением и говорят, что он передается по значению. Если параметр передается по значению, то при вызове подпрограммы значения фактических параметров присваиваются соответствующим формальным параметрам. Например, пусть имеется следующее описание процедуры: procedure Print. Square(i: integer); begin writeln(i*i); end; Тогда при вызове Print. Square(5*a-b) значение 5*a-b будет вычислено и присвоено переменной i, а затем выполнится тело процедуры.

Если параметр передается по ссылке, то при вызове подпрограммы фактический параметр заменяет собой в Если параметр передается по ссылке, то при вызове подпрограммы фактический параметр заменяет собой в теле процедуры соответствующий ему формальный параметр. В итоге любые изменения формального параметра-переменной внутри процедуры приводят к соответствующим изменениям фактического параметра. Например, если описана процедура procedure Mult 2(var a: integer); begin a: =a*2; end; то после вызова Mult 2(d) значение d увеличится в 2 раза.

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