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

22 ПиОА Сем 2 Лекция 1 процедуры и функции.pptx

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

Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции и процедуры; 4. Область видимости; 5. Параметр-значение, параметр-переменная; 6. Реентерабельность; 7. Рекурсия. 8. Пример 1

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

1. Понятие подпрограммы Так выглядит структура всей программы в Pascal: Program <имя программы>; { 1. Понятие подпрограммы Так выглядит структура всей программы в Pascal: Program <имя программы>; { Заголовок программы } Uses <имя 1, имя 2, … >; { Раздел описания модулей } Label <метка 1, метка 2, …>; { Раздел описания меток } Const <имя 1, имя 2, …>; { Раздел описания констант } Type { Раздел описания типов } <имя типа 1> = <определение типа 1>; <имя типа 2> = <определение типа 2>; … Var <имя 1, имя 2, …>: <тип>; { Раздел описания переменных } Procedure; {Раздел описания процедур} Function; {Раздел описания функций} Begin { Тело программы } <операторы> End. Процедуры и функции 3

Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции и процедуры; 4. Область видимости; 5. Параметр-значение, параметр-переменная; 6. Реентерабельность. 7. Рекурсия 8. Пример 4

 2. Стандартные функции и процедуры PASCAL: ₋ процедуры управления программой; ₋ функции преобразования; 2. Стандартные функции и процедуры PASCAL: ₋ процедуры управления программой; ₋ функции преобразования; ₋ арифметические функции; ₋ порядковые процедуры и функции; ₋ строковые процедуры и функции; ₋ процедуры и функции динамического распределения памяти; ₋ прочие процедуры и функции. Процедуры и функции 5

2. Стандартные функции и процедуры Процедуры управления программой: Procedure Break; Процедура осуществляет досрочный выход 2. Стандартные функции и процедуры Процедуры управления программой: Procedure Break; Процедура осуществляет досрочный выход из циклов For, While или Repeat. Процедура должна находиться внутри этих циклов, иначе транслятор сообщит об ошибке. Procedure Continue; Процедура досрочно начинает следующую итерацию циклов For, While или Repeat. Процедура должна находиться внутри этих циклов, иначе транслятор сообщит об ошибке. Procedure Exit; Осуществляет немедленный выход из текущей подпрограммы. Если текущей подпрограммой является главная программа, она завершает работу. Procedure Halt[(Exitcode: Integer)]; Процедура выполняет аварийное завершение программы. Чтобы нормально завершить. Процедуры и функции 6

2. Стандартные функции и процедуры Функции преобразования : function Chr(a: byte): char; Преобразует код 2. Стандартные функции и процедуры Функции преобразования : function Chr(a: byte): char; Преобразует код в символ в кодировке Windows function Ord(a: char): byte; Преобразует символ в кодировке Windows function Ord(a: integer): integer; Возвращает порядковый номер значения a function Trunc(x: real): integer; Возвращает целую часть числа x function Round(x: real): integer; Возвращает x, округленное до ближайшего целого 2. Стандартные функции и процедуры 7

Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции и процедуры; 4. Область видимости; 5. Параметр-значение, параметр-переменная; 6. Реентерабельность; 7. Рекурсия. 8. Пример 8

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

3. Пользовательские функции и процедуры Функция отличается от процедуры тем, что результат её работы 3. Пользовательские функции и процедуры Функция отличается от процедуры тем, что результат её работы возвращается в виде значения этой функции, поэтому вызов функции может использоваться наряду с другими операндами в выражениях. Заголовок процедуры имеет вид: PROCEDURE <имя> [(<сп. ф. п. >)]; заголовок функции: FUNCTION <имя> [(<сп. ф. п. >)]: <тип>; Здесь <имя> – имя подпрограммы; <сп. ф. п. > – список формальных параметров; <тип> – тип возвращаемого функцией результата. . procedure SB (a: real; b: integer; c: char); function F (a: real; b: real): real; function F (a, b: real): real; Процедуры и функции 10

3. Пользовательские функции и процедуры При описании подпрограммы указывается её заголовок и тело. Тело 3. Пользовательские функции и процедуры При описании подпрограммы указывается её заголовок и тело. Тело подпрограммы, подобно программе, состоит из раздела описаний и раздела исполняемых операторов. В разделе описаний подпрограммы могут встретиться описания подпрограмм низшего уровня, т. е. вложенных подпрограмм. Процедуры и функции 11

3. Пользовательские функции и процедуры Пример. Разработать функцию возведение числа в степень. var x, 3. Пользовательские функции и процедуры Пример. Разработать функцию возведение числа в степень. var x, y: real; function power( a, b: real): real; begin if a>0 then power : = exp(b*ln(a)) else power : = 0; end; {function power} begin repeat readln(x, y); writeln( power(x, y) ); until false; end. Процедуры и функции 12

3. Пользовательские функции и процедуры Пример. Разработать процедуру, которая выводит на экран прямоугольник из 3. Пользовательские функции и процедуры Пример. Разработать процедуру, которая выводит на экран прямоугольник из заданных символов определенного размера. procedure box (s: char; w, h: integer); var i, j: integer; begin for i : = 1 to h do begin for j : = 1 to w do write (s); writeln end; writeln end; begin box ('+', 10, 5); box ('r', 20, 3); box ('|', 50, 10); box ('$', 12, 4); end. Процедуры и функции 13

Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции и процедуры; 4. Область видимости; 5. Параметр-значение, параметр-переменная; 6. Реентерабельность; 7. Рекурсия. 8. Пример 14

4. Область видимости Подпрограмме доступны только те объекты верхнего уровня, которые описаны до описания 4. Область видимости Подпрограмме доступны только те объекты верхнего уровня, которые описаны до описания данной подпрограммы. Эти объекты называются глобальными по отношению к подпрограмме. Имена, локализованные в подпрограмме, могут совпадать с ранее объявленными глобальными именами. В этом случае считается, что локальное имя «закрывает» глобальное и делает его недоступным. Одноименные глобальные и локальные переменные – это разные переменные Процедуры и функции 15

4. Область видимости var k: integer; procedure a; var x, z: real; begin { 4. Область видимости var k: integer; procedure a; var x, z: real; begin { через x, z обозначены две величины – локальные переменные для a; k – глобальная переменная для a } end; procedure b; var x, y: integer; begin { через x, y обозначены две другие величины – локальные переменные для b; k – глобальная переменная для b } end; begin { k – единственная переменная, которую можно использовать в основной ветке программы } ………………… end. Процедуры и функции 16

4. Область видимости var i: integer; a: real; function p(d: real): real; var i: 4. Область видимости var i: integer; a: real; function p(d: real): real; var i: integer; begin i : = 3; p : = i + 10 * d; end; begin a : = 2. 0; i : = 15; p(a); writeln(' i = ', i, ' a = ', a); readln end. Процедуры и функции Две совершенно разные переменные: первая i – глобальная для всей программы, вторая i – локальная для функции p Результат: i = 15 a = 2 17

Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции и процедуры; 4. Область видимости; 5. Параметр-значение, параметр-переменная; 6. Реентерабельность; 7. Рекурсия. 8. Пример 18

5. Параметр-значение, параметр-переменная Любой из формальных параметров подпрограммы может быть либо параметром-значением, либо параметром-переменной. 5. Параметр-значение, параметр-переменная Любой из формальных параметров подпрограммы может быть либо параметром-значением, либо параметром-переменной. В предыдущем примере параметры a и b определены как параметры-значения. Чтобы определить параметры как параметры-переменные, перед ними необходимо поставить зарезервированное слово var, например function power( var a: real, b: real): real; При вызове подпрограммы, в качестве параметра-переменной должна указываться переменная соответствующего типа, в качестве параметразначения может быть указано любое выражение соответствующего типа. power(x, 3*sin(x)); или power(x, 3. 17); Процедуры и функции 19

5. Параметр-значение, параметр-переменная var a, b: integer; procedure inc 2( var c: integer; b: 5. Параметр-значение, параметр-переменная var a, b: integer; procedure inc 2( var c: integer; b: integer ); begin c : = c + c; b : = b+b; writeln(‘удвоенные : ’, c: 5, b: 5); end; begin a : = 5; b : = 7; writeln(‘исходные : ’, a: 5, b: 5); inc 2(a, b); writeln(‘результат : ’, a: 5, b: 5); end. Результат выполнения программы: исходные : 5 7 удвоенные : 10 14 результат : 10 7 Процедуры и функции 20

Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции и процедуры; 4. Область видимости; 5. Параметр-значение, параметр-переменная; 6. Реентерабельность; 7. Рекурсия. 8. Пример 21

 6. Реентерабельность Реентерабельная, или повторно входимая функция - это функция, которая может быть 6. Реентерабельность Реентерабельная, или повторно входимая функция - это функция, которая может быть использована более чем одной задачей без риска потери данных. Реентерабельная функция может быть в любое время прервана и продолжена позже без потерь данных. Реентерабельные функции либо используют локальные переменные, либо защищают свои данные, размещённые в глобальных переменных. Функция fn не является реентерабельной: var temp : integer; function fn (x, y : integer): integer; begin temp : = x; x : = y; y : = temp; fn : = x + y; end; Процедуры и функции 22

Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции и процедуры; 4. Область видимости; 5. Параметр-значение, параметр-переменная; 6. Реентерабельность; 7. Рекурсия. 8. Пример 23

7. Рекурсия Реку рсия — в определении, описании, изображении какого-либо объекта или процесса внутри 7. Рекурсия Реку рсия — в определении, описании, изображении какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя Процедуры и функции 24

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

 7. Рекурсия Пример: Реализовать метод половинного деления на основе рекурсии const Eps = 7. Рекурсия Пример: Реализовать метод половинного деления на основе рекурсии const Eps = 0. 01; var a, b: real; function y(x: real): real; begin y : = x + 5; end; Процедуры и функции //точность вычисления корня // границы отрезка // задание функции, корни которой отделяются 26

 7. Рекурсия //продолжение function Find. Root(a, b: real): real; var m: real; Result: 7. Рекурсия //продолжение function Find. Root(a, b: real): real; var m: real; Result: real; begin m : = (a+b) / 2; if abs(m-a)>Eps then if y(a)*y(m)>0 then Result: = Find. Root(m, b) else Result: = Find. Root(a, m) else Result : = m; Find. Root : = Result; end; {function Find. Root} begin writeln('Введите левую и правую границы области поиска, a и b'); readln(a, b); if y(a)*y(b)>0 then writeln('Нет корней или более одного корня') else writeln(Корень уравнения: ', Find. Root(a, b)); end. Процедуры и функции 27

 7. Рекурсия – красивая реализация, но лучшей ей не пользоваться Процедуры и функции 7. Рекурсия – красивая реализация, но лучшей ей не пользоваться Процедуры и функции 28

Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции Процедуры и функции 1. Понятие подпрограммы; 2. Стандартные функции и процедуры; 3. Пользовательские функции и процедуры; 4. Область видимости; 5. Параметр-значение, параметр-переменная; 6. Реентерабельность; 7. Рекурсия. 8. Пример 29

8. Пример Разработать продпрогрммы - вставка элемента в динамический массив - удаление элемента из 8. Пример Разработать продпрогрммы - вставка элемента в динамический массив - удаление элемента из массива - вывода на экран элементов массива. Порядок: 1) Вывод на экран содержимого массива 2) Чтение действия: вставка элемента, удаление элемента или выход 3) Если не выход, то выполнение действия и возврат к п 1. Процедуры и функции 30

8. Пример Процедуры и функции 31 8. Пример Процедуры и функции 31

8. Пример Добавьте проверку на адекватность операция вставки и удаления Процедуры и функции 32 8. Пример Добавьте проверку на адекватность операция вставки и удаления Процедуры и функции 32

8. Пример var stop : boolean; ch, val, pos : integer; m : array 8. Пример var stop : boolean; ch, val, pos : integer; m : array of integer; //---------------------------procedure print (m : array of integer); var i, N : integer; begin N : = Length(m); if N=0 then writeln('Массив пуст') else for i : = 0 to N-1 do write('m[', i, ']=', m[i], '; '); writeln; end; //print Процедуры и функции 33

8. Пример procedure delete (var m : array of integer; pos : integer); var 8. Пример procedure delete (var m : array of integer; pos : integer); var i, N : integer; begin N : = length(m); for i : = pos to N-2 do m[i] : = m[i+1]; Set. Length(m, N-1); end; //delete //---------------------------procedure insert (var m : array of integer; pos, val : integer); var i, N : integer; begin N : = length(m); Set. Length(m, N+1); N : = N + 1; for i : = N-1 downto pos+1 do m[i] : = m[i-1]; m[pos] : = val; end; //insert //--------------------------- Процедуры и функции 34

8. Пример begin repeat print(m); writeln('Выберите действие(1 - вставка, 2 - удаление, 3 - 8. Пример begin repeat print(m); writeln('Выберите действие(1 - вставка, 2 - удаление, 3 - выход)'); read(ch); case ch of 1: begin writeln('Введите номер элемента для вставки и значение'); readln(pos, val); insert(m, pos, val); end; 2: begin writeln('Введите номер элемента для удаления'); readln(pos); delete(m, pos); end; 3: stop : = true; end; until stop; end. Процедуры и функции 35

8. Пример Массив пуст Выберите действие(1 - вставка, 2 1 Введите номер элемента для 8. Пример Массив пуст Выберите действие(1 - вставка, 2 1 Введите номер элемента для вставки 0 1 m[0]=1; Выберите действие(1 - вставка, 2 1 Введите номер элемента для вставки 0 2 m[0]=2; m[1]=1; Выберите действие(1 - вставка, 2 1 Введите номер элемента для вставки 0 3 m[0]=3; m[1]=2; m[2]=1; Выберите действие(1 - вставка, 2 1 Введите номер элемента для вставки 1 4 m[0]=3; m[1]=4; m[2]=2; m[3]=1; Выберите действие(1 - вставка, 2 - удаление, 3 - выход) и значение удаление, 3 - выход) Всегда программа будет работать верно? Процедуры и функции и значение удаление, 3 - выход) 36