Подпрограммы нужны для того, чтобы упростить структуру программы и облегчить ее отладку. В виде подпрограмм оформляются логические законченные части программы.
Подпрограмма — это фрагмент кода, к которому можно обратиться по имени. Она описывается один раз, а вызываться может столько раз, сколько необходимо. Одна и та же подпрограмма может обрабатывать различные данные, переданные ей в качестве аргументов.
В Паскале два вида подпрограмм: процедуры и функции. Они имеют незначительные отличия в синтаксисе и правилах вызова. Процедуры и функции описываются в соответствующих разделах описания, до начала блока исполняемых операторов.
Само по себе описание не приводит к выполнению подпрограммы. Для того чтобы подпрограмма выполнилась, ее надо вызвать. Вызов записывается в том месте программы, где требуется получить результаты работы подпрограммы. Подпрограмма вызывается по имени, за которым следует список аргументов в круглых скобках. Если аргументов нет, скобки не нужны.
Подпрограммы (процедура)
Список аргументов при вызове как бы накладывается на список параметров, поэтому они должны попарно соответствовать друг другу.
Процедура вызывается с помощью отдельного оператора, а функция — в правой части оператора присваивания, например:
inc(i); writeln(a, b, c);
Внутри подпрограмм можно описывать другие подпрограммы. Они доступны только из той подпрограммы, в которой они описаны. Рассмотрим правила описания подпрограмм.
Структура процедуры аналогична структуре основной программы:
procedure имя [(список параметров)];
Любая подпрограмма должна быть описана до того, как она будет вызвана в программе или в другой подпрограмме. Все переменные, которые использует подпрограмма, могут быть либо глобальные либо локальные.
Глобальными называются переменные, объявленные в основной программе и доступные как программе, так и всем ее подпрограммам.
Локальными называются переменные, объявленные внутри подпрограммы и доступные только ей самой.
Обмен информацией между основной программой и подпрограммой может осуществляться только с помощью глобальных переменных.
Подпрограмма может использовать любые глобальные переменные кроме тех, которые имеют те же имена, что и локальные переменные. Переменные с совпадающими именами, которые могут быть описаны в основной программе или других подпрограммах, не имеют ничего общего с локальными переменными. если переменная описана. Если переменная описана в основной программе и не переопределена в подпрограмме, она может использоваться в подпрограмме. Память для локальных (т.е. описанных в подпрограмме) переменных выделяется на время исполнения данной подпрограммы в специальной области, называемой стеком. При завершении работы подпрограммы память освобождается, поэтому все внутренние результаты работы подпрограммы не сохраняются от одного обращения к другому.
Если говорить о плюсах использования в программировании подпрограмм, то можно назвать следующие:
Урок 21. Подпрограммы. Функции на языке Паскаль
Программы с использованием подпрограмм позволяют реализовать один из самых прогрессивных методов программирования — структурное программирование.
Программа становится более читаемой.
Экономия памяти, которая получается из-за того, что память для хранения переменных, используемых в подпрограммах, выделяется только на время работы подпрограммы.
В языке Паскаль выделяют два вида подпрограмм: процедуры (Procedure) и функции (Function). Любая программа может содержать несколько процедур и функций. Структура любой подпрограммы аналогична структуре всей программы. Подпрограмма должна быть описана до того, как будет использована в программе или другой подпрограмме.
Процедуры и функции объявляются в разделе описания вслед за разделом переменных.
Область видимости переменной, а особенно, локальная, существенно облегчает управление кодом. Если бы все переменные были глобальными, то их можно было бы менять в любом месте скрипта. Это привело бы к хаосу и больших скриптах, так как очень часто разные части скрипта используют переменные с одинаковыми именами. Ограничивая область видимости локальным контекстом вы определяете границы кода, который может получить доступ к переменной, что делает код более устойчивым, модульным и простым в отладке.
Переменные с глобальной областью видимости называются глобальными, а с локальной областью видимости — локальными.
Обмен данными между основной программой и подпрограммой. Входные и выходные параметры. Формальные и фактические параметры. Объявление процедур и функций. Параметры-значения и параметры-переменные.
Обмен данными между основной программой и подпрограммой реализован в механизме входных и выходных параметров.
Входными параметрами называют величины, которые передаются из основной программы в подпрограмму (исходные данные для работы подпрограммы).
Выходные параметры, которые имеют смысл только для под-программ-функций, передаются из подпрограммы в основную программу (результат работы).
Параметры, указываемые при описании подпрограммы, называются формальными. Параметры, указываемые при вызове подпрограммы, называются фактическими.
При вызове процедуры или функции транслятор выполняет следующие операции:
1. В теле основной программы вычисляются выражения, стоящие на месте фактических параметров.
2. В оперативной памяти выделяется место под формальные параметры в соответствии с их типами.
3. Выполняется проверка соответствия типов формальных и фактических параметров. При несоответствии типов происходит ошибка трансляции.
4. Если количество, порядок и типы параметров совпадают, начинает работать механизм передачи параметров, заключающийся в установлении взаимно однозначного соответствия между формальными и фактическими пара-метрами.
Объявление процедуры в языке Pascal имеет следующий синтаксис:
Первая строка называется заголовком процедуры, операторы между операторными скобками begin и end называются телом процедуры.
Список формальных параметров подпрограммы указывается в круглых скобках после ее имени. Список состоит из набора отдельных описаний, разделяемых символом; (точка с запятой). Каждое такое описание включает перечисление через запятую идентификаторов пе-ременных и указание типа. Выделяют два типа формальных парамет-ров, различающиеся способом объявления в заголовке процедуры:
1. Параметры-значения. Описываются обычным образом:
например, a,b:integer;, c:real:=7.35;
В ячейки памяти, соответствующие формальным параметрам-значениям, при вызове процедуры заносятся копии значений соответствующих фактических параметров. Последние могут быть константами и выражениями, совместимыми по присваиванию с формальными параметрами. Если формальный параметр является параметром-значением, то говорят, что он передается по значению.
2. Параметры-переменные. При описании должны предваряться зарезервированным словом Var или Const, например
Var a,b:integer; Const c:real:=7.35;.
При вызове процедуры память под параметры-переменные не выделяется. Вместо этого имена параметров-переменных становятся синонимами фактических параметров. Отсюда, в частности, следует, что фактический параметр, связанный с формальным параметром-переменной, не может быть константой или вычисляемым выражением, но обязательно должен быть переменной.
Если в теле процедуры параметр-переменная изменяет значение, то изменяет значение и переменная, которая была использована как фактический параметр. Это позволяет изменять значения глобальных переменных из подпрограммы.
Если формальный параметр является параметром-переменной, то говорят, что он передается по ссылке.
Замечание. После последнего описания формальных параметров символ; (точка с запятой) не ставится. Он ставится после закрывающей круглой скобки.
Имена формальных параметров не должны совпадать с именем подпрограммы и именами переменных в разделе описаний подпрограммы. Пример заголовка процедуры:
procedure MyProc(a:integer; flag:boolean; d,e:char);.
Если в качестве формальных параметров используются структурированные данные, то первоначально необходимо объявить пользовательский тип данных, соответствующий структурному типу, например:
MyType=array [1..10] of integer;
procedure MyProc(a:integer; massiv:MyType; d,e:char);
Подпрограмма-функция описывается аналогично процедуре, за исключением того, что вместо слова procedure используется function и указывается тип возвращаемого результата. Синтаксис объявления функции:
Имя функции можно использовать внутри тела этой функции как переменную, которой присваивается возвращаемое функцией значение. Идентификатор функции нельзя использовать в выражениях внутри тела функции.
В PascalABC.NET определена специальная переменная Result, в которую заносится возвращаемое функцией значение. В отличие от идентификатора функции, переменную Result можно использовать в выражениях.
Если внутри тела функции не присвоить идентификатору функции или переменной Result какого-либо значения, то результатфункции считается неопределенным.Раздел описаний процедур и функций может содержать блоки,аналогичные блокам раздела описаний основной программы: Label,Const, Var, Type, а так же вложенные процедуры и функции. Переменные, объявляемые в разделе описаний подпрограммы, являются для нее локальными. При вызове процедуры или функции фактические аргументы перечисляются через символ, (запятая).Если в программе описаны несколько процедур и/или функций,то в каждой из последующих можно обращаться в предыдущем.
Источник: mydocx.ru
Подпрограммы Подпрограммы Подпрограммы представляют собой важный
Подпрограммы • Подпрограммы представляют собой важный инструмент языка программирования, позволяющий писать хорошо структурированные программы. • Языки, в которых предусмотрены механизмы структурирования называются процедурно-ориентированными.
Подпрограммы Подпрограмма – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий. Применение: Применение • выполнение одинаковых действий в разных местах программы • разбивка программы (подпрограммы) на подзадачи для лучшего восприятия Задача Подзадача 1 1. 2 Подзадача 2 1. 3 2. 1 2. 2 Подзадача 3 2. 3 3. 1 3. 2 3. 3
Подпрограммы Особенности: Особенности • Если программа предназначена для решения задачи в целом, то подпрограмма используется для выполнения логически завершенной последовательности действий. Существует 2 вида подпрограмм: процедуры и функции • Принципиальное отличие между подпрограммами заключается в их оформлении и способе передачи данных в подпрограмму и обратно.
Назначение подпрограмм 1. Основа для реализации структурного подхода 2. Средство для уменьшения сложности структуры программы 3. Средство для экономии памяти: Ø рациональная запись кода и его использование при вызовах подпрограмм (подпрограмма существует в единичных экземплярах, а вызываться может многократно); Ø динамическое выделение памяти под хранение значений объектов данных, описанных в подпрограмме (как только подпрограмма начинает работу – память выделяется, как заканчивает освобождается) 5
Подпрограммы Отличия: Отличия • Отличие функции от процедуры заключатся в том, что результатом исполнения операторов, образующих тело функции, всегда является некоторое значение. • Каждая подпрограмма имеет уникальное имя. Упоминание этого имени в тексте программы называется вызовом процедуры/функции • Вызов функции может быть составной частью выражения (при согласовании типов) • Вызов процедуры осуществляется отдельным оператором с помощью ее имени
Структура подпрограмм • Процедуры Procedure Имя[(Список формальных параметров)]; Label … Const … Type … Var … Procedure | function … begin end;
Структура подпрограмм • Функции Function Имя[(Список формальных параметров)]: тип_результата; Label … Const … Type … Var … Procedure | function … begin … Имя : = результат; … end;
Подпрограммы • Задача 1: Вывести строку, содержащую K символов «*» , M символов «+» и D символов «!» • Особенность: – общее: Вывод на экран – отличия: количество повторений, вид символа ( «*» , «+» , «!» )
Алгоритм задачи начало ввод K, M, D Вывод K «*» Вывод M «+» Вывод D «!» конец
Программа задачи 1 program Program 1; var K, M, D, i : byte; begin Write(‘Введите K, M, D: ’); Read. Ln(K, M, D); for i : = 1 to K do вывод K «*» write(’*’); for i : = 1 to M do write(’+’); вывод M «+» for i : = 1 to D do write(’!’); вывод D «!» Read. Ln; end.
Программа задачи 1 program Program 1; var K, M, D : byte; procedure Write_zv; Write_zv var i: byte; begin for i : = 1 to K do write(’*’); end; procedure Write_plus; Write_plus var i: byte; begin for i : = 1 to M do write(’+’); end; procedure Write_znak; Write_znak var i: byte; begin for i : = 1 to D do write(’!’); end;
Алгоритм задачи начало ввод K, M, D Вывод K «*» Вывод M «+» Вывод D «!» конец //Тело основной программы begin Write(‘Введите K, M, D: ’); Read. Ln(K, M, D); Write_zv; Write_plus; Write_znak; Read. Ln; end. ? Что плохо?
Область действия (видимости) Блок (подпрограмма) в общем случае обеспечивает выполнение двух основных функции: 1. резервирование области памяти для создания в ней основных объектов данных; 2. введение новой области видимости (действия) идентификаторов описанных объектов данных. Область видимости (действия) – это часть программы, на которую распространяются сделанные описания, т. е. это где видны, а следовательно, могут быть использованы идентификаторы объектов описания. 16
Область действия (видимости) Областью действия описания любого программного объекта (переменной, типа, константы и т. д. ) является тот блок, в котором расположено это описание. Если данный блок вложен в другой (подпрограмма), то присутствующие в нем описания являются локальными. Они действуют локальными только в пределах внутреннего блока. Описания сделанные во внешнем блоке видны в любом внутреннем блоке и их область видимости глобальна (по отношению к внутреннему блоку). 17
PROGRAM Prog; Var V 1: integer; Procedure A; Var V 2: integer; Begin … end; Procedure B; Var V 3: integer; Procedure B 1; Var V 4: integer; Begin … end; Var V 5: integer; BEGIN … END. PROGRAM Prog; Var V 1: integer; Procedure A; Var V 2: integer; Procedure B; Var V 3: integer; Procedure B 1; Var V 4: integer; Var V 5: integer; 18
Время жизни объектов данных • При передачи управления в данный блок создаются все описанные в нем объекты данных, а затем выполняются последовательность его операторов. • При выходе из блока созданные объекты данных уничтожаются. • Создание и уничтожение объектов данных – это резервирование и освобождение области памяти по размеру соответствующее типу объекта данных. Этим и определяется время жизни объектов данных, то есть время от его создания до данных уничтожения. 19
Область действия (видимости) • Если имена глобальных и локальных идентификаторов совпадают, то внутри подпрограммы локальные идентификаторы перекрывают глобальные. • При этом значение глобального идентификатора сохраняется в специальной области памяти, называемой стек • После исполнения подпрограммы глобальные идентификаторы восстанавливаются, а локальные исчезают.
PROGRAM Prog; Var v 1: integer; Имена локальной и глобальной переменной совпадают Procedure A; Var v 1: integer; begin … v 1 : = 10; Write. Ln(‘В процедуре v 1 = ’, v 1); end; BEGIN v 1 : = 5; A; Write. Ln(‘В программе v 1 = ’, v 1); END. Результат работы программы: В процедуре v 1 = 10 В программе v 1 = 5 21
Подпрограммы Формальные и фактические параметры • Исходные данные для работы подпрограммы можно передавать через глобальные параметры, а также через переменные. • Параметры в заголовке подпрограммы называются формальными • Параметры при вызове подпрограммы называются фактическими
Программа задачи 1 с процедурами без параметров program Program 1; var K, M, D : byte; procedure Write_zv; Write_zv var i: byte; begin for i : = 1 to K do write(’*’); end; //Тело основной программы begin Write(‘Введите K, M, D: ’); Read. Ln(K, M, D); Write_zv; Write_plus; Write_znak; procedure Write_plus; Write_plus var i: byte; begin Read. Ln; for i : = 1 to M do write(’+’); end; procedure Write_znak; Write_znak var i: byte; begin for i : = 1 to D do write(’!’); end;
Программа задачи 1 с процедурой с параметрами program Program 1; var K, M, D : byte; procedure Write_znak(c: char; N: byte) var i: byte; Формальные begin параметры for i : = 1 to N do write(c); end; begin Write(‘Введите K, M, D: ’); Read. Ln(K, M, D); Write_znak(’*’, K); Write_znak(’+’, M); Фактические Write_znak(’!’, D); параметры Read. Ln; end.
Подпрограммы Формальные и фактические параметры При подстановке фактических параметров на место формальных должны соблюдаться следующие правила их соответствия: • по количеству указываемых параметров; • по порядку их перечисления; • по типу; • функциональному соответствию.
Структура подпрограмм • Функции Function Имя[(Список формальных параметров)]: тип_результата; Label … Const … Type … Var … Procedure | function … begin … Имя : = результат; … end;
Структура подпрограмм • Отличия функций от процедур 1. В заголовке функции обязательно указывается тип возвращаемого значения (все, кроме типа file) 2. В теле функции обязательно присутствует оператор присваивания имени функции результирующего значения 3. Вызов функции осуществляется внутри выражений, а не отдельным оператором, как процедура 4. Возвращаемое значение в теле функции может присваиваться или имени функции или специальной предопределенной системной переменной Result
Функции • Переменная Result 1. Каждая функция имеет назначенную неявным образом локальную переменную Result, имеющую тот же тип, что и тип результата функции. 2. Присваивание значения этой переменной соответствует присваиванию значения имени функции 3. Использование Result в функциях предпочтительнее, т. к. переменная Result может использоваться в правой части выражения без выполнения рекурсивного вызова
Функции • Задача 2: Вычислить сумму: .
Программа задачи 2 program Program 2; function Summa_1(N: byte): integer; integer var i: byte; begin Result : = 0; for i : = 1 to N do Result : = Result + sqr(i); end; function Summa_2(M: byte): single; Summa_2(M: byte): single var i: byte; begin Result : = 0; for i : = 1 to M do Result : = Result + 1/(i+10); end;
Программа задачи 2 (продолжение) function Proizv(K: byte): integer; integer var i: byte; begin Result : = 1; for i : = 1 to N do Result : = Result * i; end; var N, M, K: byte; //Глобальные объявления S : real; BEGIN //Тело основной программы Write(‘Введите N, M, K: ’); Read. Ln(N, M, K); S : = Summa_1(N) + Summa_2(M)- Proizv(K); Write. Ln(‘S = ’, S: 6: 3 ); Read. Ln; END.
Функции Задача 3: • Дана последовательность целых чисел, за которой следует 0. • Определить количество простых и совершенных чисел последовательности.
Алгоритм задачи 3 начало ввод x Count_pr: = 0; Count_sov : =0; да x <> 0? да x простое? нет Count_pr Count_sov Count_pr : = count_pr + 1; да x cоверш? Count_sov : = count_sov + 1; конец нет ввод x
Алгоритм начало ввод N Ввод N S : = 0; i =2, N div 2 i= 1, N div 2 нет N mod i = 0? да да S : = S + i i Сост. конец нет S=0? S=0 да Прост. i Несов. конец нет S=N? да Совер.
Функции • Подзадачи 3: 1. Определение, число X простое или нет 1. 1 Найти сумму делителей проверяемого числа в диапазоне от 2 до X div 2 1. 2 Сравнить сумму с 0 2. Определение, число X совершенное или нет 2. 1 Найти сумму делителей проверяемого числа в диапазоне от 1 до X div 2 2. 2 Сравнить сумму с N
Программа задачи 3 program Program 3; function Summa_Del(N: byte): word; Summa_Del(N: byte): word var i: byte; begin Result : = 0; for i : = 2 to N div 2 do if N mod i = 0 then Result : = Result + i; end; function Prost(N: byte): boolean; Prost(N: byte): boolean begin Result : = Summa_Del(N)=0; end; function Sover(N: byte): boolean; Sover(N: byte): boolean begin Result : = Summa_Del(N) = N-1; end;
Программа задачи 2 (продолжение) var X: byte; count_pr, count_sov: byte; //Тело основной программы begin Read. Ln(X); While x <> 0 do begin if Prost(x) then inc(count_pr); if Sover(x) then inc(count_sov); Read. Ln(X); end; Write(‘Простых = ’, count_pr, ‘Совершенных = ’ count_sov); Read. Ln; end.
Формальные параметры • По способу передачи формальные параметры делятся на 4 типа: 1. Параметры-значения 2. Параметры-переменные (var) 3. Параметры-константы (const) 4. Выходные параметры (out)
Формальные параметры Параметры значения определяют исходные данные для работы процедур и функций. В списке формальных параметров они описываются в следующем виде: procedure my 1(q 1: T 1; q 2: T 2) или procedure my 2(q 1, q 2: T) При вызове подпрограммы фактический параметр, может быть любым выражением, результат вычисления которого принадлежит тому же типу, что и формальный параметр.
Передача по значению При обращении к подпрограмме выражение вычисляется. В памяти создаются временные переменные с именами q 1 и q 2, и в них копируется результат вычислений. Изменение значений переменных q 1 и q 2 в теле подпрограммы никак не влияет на значения переменных из основной программы. При выходе из подпрограммы формальные переменные q 1 и q 2 уничтожаются. 42
Передача по значению Пример1: Параметрprogram Program 4; значение procedure Sq_1(x: real); begin x : = Sqr(x); Write. Ln(‘В процедуре — ’, x); end; var y: real; Begin y : = 0. 5; Sq_1(y); Write. Ln(‘В программе — ’, y); Readln; end. Результат работы программы: В процедуре — 0. 25 В программе – 0. 5 43
Передача по значению Таким образом, в примере 1, переменная y не изменила своего значения в программе. При работе с параметром-значением в подпрограмму передается не сама переменная, а ее копия (т. е. ее значение), и все действия выполняются над копией. После чего копия теряет свое значение! 44
Передача по значению y : = 0. 5; Sq_1(y); Write. Ln(‘В программе -’, y); 0. 5 0. 25 0. 5 y x Результат работы программы: В процедуре — 0. 25 В программе – 0. 5 45
Передача по значению Пример2: program Program 5; function Chet_kr 5(N: word): boolean; begin Result : = (N mod 5 = 0) and (N mod 2 = 0); end; var X: byte; Begin Read(x); Writeln(Chet_kr 5(sqr(x)+x)); sqr(x)+x Readln; end. Фактический параметр – как выражение 46
Передача параметров как переменных Параметры-переменные позволяют передавать в основную программу измененные значения. Параметры переменные в списке формальных параметров описываются с помощью указания перед ними ключевого слова var. Например: procedure my 3 (var q 1, q 2: t 1; var q 3: t 2) ; 47
Передача параметров как переменных При обращении к подпрограмме фактические параметры должны быть обязательно переменными, того же типа, что и формальные параметры. В подпрограмму передается адрес переменной (ссылка) и операторы процедуры непосредственно используют данную переменную. В данном случае любые изменения параметра q 1, произведенные в подпрограмме, в действительности относятся к той переменной, которая будет указана при вызове подпрограммы на месте q 1. 48
Передача параметров как переменных Пример1: Параметрprogram Program 6; переменная procedure Sq_2(var x: real); begin x : = Sqr(x); Write. Ln(‘В процедуре — ’, x); end; var y: real; Begin y : = 0. 5; Sq_2(y); Write. Ln(‘В программе — ’, y); Readln; end. Результат работы программы: В процедуре – 0. 25 В программе – 0. 25 49
Передача параметров как переменных y : = 0. 5; Sq_2(y); Write. Ln(‘В программе -’, y); 0. 25 0. 5 y x Результат работы программы: В процедуре — 0. 25 В программе – 0. 25 50
Передача параметров как переменных Пример2: program Program 7; function Chet_kr 5(var N: word): boolean; begin Result : = (N mod 5 = 0) and (N mod 2 = 0); end; var X: byte; Begin Read(x); Writeln(Chet_kr 5(sqr(x)+x)); sqr(x)+x Readln; end. ОШИБКА! Фактический параметр – должен быть переменной 51
Передача параметров как констант Передача параметра как константы осуществляется заданием перед его описанием ключевого слова const. procedure my 4 (const q 1: t 1); Параметры константы по механизму передачи похожи на параметры-значения, но их значения нельзя изменять в теле подпрограммы. В качестве аргументов могут использоваться константы, выражения и переменные. В подпрограмму передаются адреса фактических параметров. 52
Передача параметров как выходных параметров Выходные параметры описываются с помощью зарезервированного слова out. procedure my 5(out q 1: t 1); Выходные параметры по механизму передачи похожи на параметры-переменные, но при этом в подпрограмму не передается начальное значение этого параметра, т. е. память, занимаемая соответствующей переменной, указанной при вызове подпрограмме на месте q 1, будет очищена при вызове подпрограммы. 53
Передача параметров как выходных параметров Пример1: program Program 6; procedure Sq_2(x: real; out Z: real); begin Выходной x : = Sqr(x); Z : = x – Sqr(x); параметр end; var y, S: real; Begin Переменной S значение не y : = 0. 5; присвоено Sq_2(y, S); Write. Ln(‘S = ’, S); Readln; end. Результат работы программы: S = 0. 1875 54
Источник: present5.com
Подпрограммы
Подпрограммы – это средство структурирования
программ, идея которого заключается в том:
– чтобы программа состояла не из громадного количества
операторов;
– чтобы программа состояла из относительно
самостоятельных частей;
– чтобы каждой части назначена отдельная, сравнительно
узкая роль;
– чтобы программа не состояла из многочисленных переходов
• Программы, которые сделаны удобочитаемыми еще
на этапе их написания, также легки при отладке и в
обслуживании.
3. Преимущества технологии программирования с использованием подпрограмм
•организация работы нескольких программистов над одной программой с
последующим объединением отдельно отлаженных и относительно
независимых блоков в единое целое;
•отладка отдельных блоков и только после этого программы в целом;
•значительная экономия памяти, так как многократно используемый участок
заносится в память только один раз;
•упрощение внесения изменений в программу, так как исправление ошибки в
одном блоке не вызывает корректировку других блоков
4. Определение
• Подпрограмма –
функционально
самостоятельная
часть программы,
обладающая
собственным
именем и набором
локальных имен.
5. Объявление подпрограммы
• Подпрограмма, чтобы ее можно было вызвать в
программе, должна быть объявлена в разделе
описания программы
• Объявить подпрограмму – значит указать ее
заголовок (с используемыми в ней формальными
параметрами), описать локальные переменные и,
наконец, задать ее тело.
В языке программирования Паскаль
приняты два вида подпрограмм:
функции и процедуры
6. Особенности подпрограммы — функции
Особенности подпрограммы функции
• Результат работы – единственное
значение, которое передается в
программу
• Это значение несет имя функции
7. Структура подпрограммы — функции
Function имя (формальные параметры):
тип результата;
Var
блок описания локальных переменных
Begin
тело подпрограммы — функции
имя:=результат;
End;
8. Вызов подпрограммы — функции
Вызов подпрограммы функции
• Вызов функции пользователя
осуществляется как вызов любой
стандартной функции из любых точек
программы и любое количество раз
f:= sqrt(a+s);
Переменная :=
имя функции (фактический параметр1, фактический параметр2,. . .);
9. Пример
Подпрограмма:
function имя (формальный параметр1, формальный параметр2…): тип;
function SUMMA (A:MAS; N,M: INTEGER): REAL;
………………
SUMMA:=………..
end;
Примечание:
TYPE MAS = array [1..10, 1..10] of real;
Вызов подпрограммы:
Идентификатор:=
имя функции (фактический параметр1, фактический параметр2. . .);
XSUMMA:= SUMMA (X,4,4);
S:= SUMMA (G,L,P);
WRITELN (‘Сумма элементов массива С =’, SUMMA (С,3,5):10:2 );
10. Схемы алгоритмов основной программы и подпрограммы
Н
………
SUMMA
XSUMMA= SUMMA (X,4,4)
………
………
SUMMA =…..
S= SUMMA (G,L,P)
К
………
К
11. Структура процедуры
Procedure имя (формальные параметры);
Var
блок описания локальных переменных
Begin
тело процедуры
End;
12. Вызов процедуры
Вызов осуществляется по имени
процедуры из любых точек программы и
любое количество раз
Имя_процедуры (параметр1, параметр2, . . .);
13. Схема алгоритма (основная программа и подпрограмма)
Н
……
……
Lin
Lin (‘*’,50)
……
……
Lin (h,k)
……
К
K
14. Параметры
Параметры обеспечивают механизм
замены, который позволяет выполнять
процедуру с различными данными.
Между фактическими параметрами в
операторе вызова процедуры и
формальными параметрами в заголовке
описания процедуры устанавливается
соответствие:
по количеству;
типу (real, integer…);
по сущности (переменная, массив…)
15. Пример
формальные параметры
Процедура ЭКЗАМЕН (студент, предмет, дата, оценка)
ВЫЗОВ
фактические параметры
ЭКЗАМЕН(Иванов, Программирование, 13.01, оценка);
ЭКЗАМЕН(Михеев, Информатика, 38.02, оценка);
студент := Василевский;
предмет := Математический анализ;
ЭКЗАМЕН(студент, предмет, 24.12, оценка);
ЭКЗАМЕН(23.09, Сидоров, История, оценка);
16. Параметры-значения Параметры — переменные
Если процедура возвращает в программу какие-то
значения, соответствующие переменные должны быть
описаны как параметры-переменные с использованием
оператора Var, исходные данные для подпрограммы –
параметры-значения.
Procedure center (a:real, Var h:real, y: real);
Var предшествует тем параметрам, значения которых должны
быть (или могут быть) изменены процедурой.
17. При вызове процедуры выполняются следующие действия
ПРИ ВЫЗОВЕ ПРОЦЕДУРЫ ВЫПОЛНЯЮТСЯ
СЛЕДУЮЩИЕ ДЕЙСТВИЯ
1.
2.
3.
4.
Формальные параметры заменяются фактическими.
Выполняется тело процедуры.
Происходит возврат в вызывающую программу.
После вызова процедуры выполняется оператор,
следующий за вызовом.
18. Принципиальная структура программы
ПРИНЦИПИАЛЬНАЯ СТРУКТУРА ПРОГРАММЫ
PROGRAM Имя программы;
USES
Список используемых библиотек (модулей);
CONST
Определение констант программы;
TYPE
Описание типов;
VAR
Определение глобальных переменных программы;
ОПРЕДЕЛЕНИЕ ПРОЦЕДУР (заголовки и, возможно тела процедур)
ОПРЕДЕЛЕНИЕ ФУНКЦИЙ(заголовки и, возможно тела функций)
BEGIN
Основной блок программы (тело программы)
……
END.
19. Параметры процедур
Параметры
Формальные
Переменные
Фактические
Значения
20. Описание параметров
Параметры
Локальные
Глобальные
21. Основные отличия между Function и Procedure
• Вызов
• f:= DAG(a,s);
• ST(X,NR,0,K);
• Результат
• Только один (имени функции присваивается
результат)
• Любое количество (или отсутствие)
• Описание
• Указание типа результата
• Указание типа для параметров-переменных
Источник: ppt-online.org