Лекция 6 Пользовательские процедуры и функции Подпрограммы Подпрограммой

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

40914-functions.ppt

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

>Лекция 6 Пользовательские  процедуры и функции Лекция 6 Пользовательские процедуры и функции

>Подпрограммы Подпрограммой называется особым образом оформленный фрагмент программы, имеющий собственное имя.  Упоминание этого Подпрограммы Подпрограммой называется особым образом оформленный фрагмент программы, имеющий собственное имя. Упоминание этого имени в тексте программы приводит к активизации подпрограммы и называется ее вызовом. Сразу после активизации подпрограммы начинают выполняться входящие в нее операторы, после выполнения последнего из них управление возвращается обратно в основную программу и выполняются операторы, стоящие непосредственно за оператором вызова процедуры.

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

>Подпрограммы Подпрограммы представляют собой инструмент, с помощью которого любая программа может быть разбита на Подпрограммы Подпрограммы представляют собой инструмент, с помощью которого любая программа может быть разбита на ряд в известной степени независимых друг от друга частей. Такое разбиение необходимо по двум причинам: Во-первых, это средство экономии памяти: каждая подпрограмма существует в программе в единственном экземпляре, в то время как обращаться к ней можно многократно из разных точек программы. Вторая причина заключается в том, что использование подпрограмм позволяет структурировать текст программы. Последовательное выделение отдельных частей программы в подпрограммы продолжается до тех пор, пока реализуемые подпрограммами алгоритмы не станут настолько простыми, чтобы их можно было легко запрограммировать.

>Описание подпрограмм Пользовательские подпрограммы описываются в разделе описания процедур и функций раздела описаний языка Описание подпрограмм Пользовательские подпрограммы описываются в разделе описания процедур и функций раздела описаний языка Паскаль. Описание подпрограммы состоит из заголовка, раздела описаний и тела подпрограммы: Заголовок подпрограммы; Раздел описаний Begin //Тело подпрограммы End; Исполняемая часть любой подпрограммы заканчивается словом end с точкой с запятой.

>Заголовок подпрограммы Заголовок процедуры имеет вид:  Procedure имя_процедуры (список_параметров); Здесь procedure – зарезервированное Заголовок подпрограммы Заголовок процедуры имеет вид: Procedure имя_процедуры (список_параметров); Здесь procedure – зарезервированное слово, список_параметров – параметры вызова передаваемые в процедуру. Список параметров может отсутствовать, тогда процедура описывается как: Procedure имя_процедуры; Заголовок функции имеет вид: Function имя_функции (список_параметров):тип_результата; Здесь function - зарезервированное слово, тип_результата – тип возвращаемого функцией результата. Для функций без параметров заголовок имеет вид: Function имя_функции:тип_результата;

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

>Список параметров Список формальных параметров необязателен и может отсутствовать. Если же он есть, то Список параметров Список формальных параметров необязателен и может отсутствовать. Если же он есть, то в нем должны быть перечислены имена формальных параметров и их типы, например: Procedure Pr(a: Real; b: Integer; c: Char); Как видно из примера, параметры в списке отделяются друг от друга точками с запятой. Несколько следующих подряд однотипных параметров можно объединять, например: Function F(a,b: Real): Real; Операторы тела подпрограммы рассматривают список формальных параметров как своеобразное расширение раздела описаний: все переменные из этого списка могут использоваться в любых выражениях внутри подпрограммы.

>Список параметров В программе, вызывающей подпрограмму список параметров имеет формальный смысл.  К примеру, Список параметров В программе, вызывающей подпрограмму список параметров имеет формальный смысл. К примеру, если в списке параметров функции Function F(x:real):real; присутствует вещественный параметр x, в программе для вызова функции достаточно указание в качестве любого вещественного значения, например: var y:real; // глобальная переменная, видна во всей программе procedure qub(x:real); var q:real;// локальная переменная, видна только в процедуре begin q:=x*x*x; writeln('Qub chisla ',x:1:1,' raven ',q:1:1); end; begin //начало основной программы y:=3; qub(2.3); qub(y); readln; end.

>Список параметров Любой из формальных параметров подпрограммы может быть либо параметром-значением, либо параметром-переменной, либо, Список параметров Любой из формальных параметров подпрограммы может быть либо параметром-значением, либо параметром-переменной, либо, наконец, параметром-константой. По умолчанию параметры вызова определяются как параметры-значения. Если параметры определяются как параметры-переменные, перед ними необходимо ставить зарезервированное слово var, а если это параметры-константы,- слово const, например: Procedure MyProcedure (var a: Real; b: Real; const c:char); Параметры-значения передаются в подпрограмму, могут изменять свое значение в процессе выполнения подпрограммы, однако после выполнения подпрограммы сохраняют первоначальные значения.

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

>Пример разных видов параметров program pr1;  var a,b,c:byte;  procedure Proc1(var x:byte; y:byte; Пример разных видов параметров program pr1; var a,b,c:byte; procedure Proc1(var x:byte; y:byte; const z:byte); begin x:=2*x; y:=3*y; //z:=4*z; снятие комментария приведет к ошибке writeln(x,' ',y,' ',z,' '); end; begin a:=3; b:=4; c:=5; proc1(a,b,c); writeln(a,' ',b,' ',c,' '); readln; end. В результате получим: 6 12 5 6 4 5

>Результат функции Как уже говорилось выше, функция отличается от процедуры тем, что результат ее Результат функции Как уже говорилось выше, функция отличается от процедуры тем, что результат ее работы возвращается в виде значения этой функции. Тип возвращаемого результата функции в последних версиях языка Паскаль (Object Pascal, Free Pascal) может быть любым. Присваивание выводимого значения производится в конце тела функции строчкой: имя_функции:=значение: Пример - функция возведения числа в куб: function qub(x:real):real; begin qub:=x*x*x; end;

>Иерархия подпрограмм Возможен доступ только к подпрограмме на один уровень ниже. Так из основной Иерархия подпрограмм Возможен доступ только к подпрограмме на один уровень ниже. Так из основной программы можно получить доступ к подпрограмме А и нельзя к подпрограмме А1. При входе в подпрограмму низшего уровня становятся доступными не только объявленные в ней имена, но и сохраняется доступ ко всем именам верхнего уровня. Так, например, из подпрограммы В21 мы можем вызвать подпрограмму А, использовать имена, объявленные в основной программе, в подпрограммах В и В2, и даже обратиться к ним. При взаимодействии подпрограмм одного уровня иерархии вступает в силу основное правило Турбо Паскаля: любая подпрограмма перед ее использованием должна быть описана. Поэтому из подпрограммы В можно вызвать подпрограмму А, но из А вызвать В невозможно.

>Рекурсивное описание функций Рекурсия - это такой способ организации вычислительного процесса, при котором подпрограмма Рекурсивное описание функций Рекурсия - это такой способ организации вычислительного процесса, при котором подпрограмма в ходе выполнения составляющих ее операторов обращается сама к себе. Пример – вычисление факториала n!=n*(n-1)!: program recur; var n:integer; function fact(n:integer):longint; begin if n=0 then fact:=1 else fact:=n*fact(n-1); end; begin write('n='); readln(n); write('n!=',fact(n)); readln; end.