Программирование на языке Паскаль Тема 13. Процедуры Тема 14. Функции
2 Достоинства подпрограмм: программы с участием подпрограмм легче тестировать и отлаживать, у них более четкая логическая структура; независимость п/п локализует все детали программной реализации алгоритма, и поэтому их изменение не приводит к изменению основной программы. Самостоятельный характер п/п позволяет составлять их различным программистам. Использование п/п экономит память. Память для хранения переменных подпрограмм выделяется только на время ее работы и высвобождается, как только ее выполнение заканчивается. Теория. М.Е.Фиошин, § 13 (стр. 190 – 198) Подпрограммы. Общие сведения.
3 Что такое Процедуры? Процедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий. Применение: выполнение одинаковых действий в разных местах программы разбивка программы (или другой процедуры) на подзадачи для лучшего восприятия Подзадача 1Подзадача 2Подзадача Задача
4 Что такое процедура? текст (расшифровка) процедуры записывается до основной программы в программе может быть много процедур чтобы процедура заработала, нужно вызвать её по имени из основной программы или из другой процедуры
5 Пример программы с процедурой writeln('Ошибка программы'); много раз! program withProc; var n: integer; begin read(n); if n < 0 then Error;... end. program withProc; var n: integer; begin read(n); if n < 0 then Error;... end. procedure Error; begin writeln('Ошибка программы') end; procedure Error; begin writeln('Ошибка программы') end; вызов процедуры Имя процедуры
6 Процедуры Особенности: все процедуры расположены выше основной программы в заголовке процедуры перечисляются формальные параметры, они обозначаются именами, поскольку могут меняться при вызове процедуры из основной программы в скобках указывают фактические параметры (числа или арифметические выражения) в том же порядке procedure Tr( x, y, r, g, b: integer); Tr (200, 100, 0, 255, 0); x x y y r r g g b b
7 Процедуры Особенности: для каждого формального параметра после двоеточия указывают его тип если однотипные параметры стоят рядом, их перечисляют через запятую внутри процедуры параметры используются так же, как и переменные procedure A (x: real; y: integer; z: real); procedure A (x, z: real; y, k, l: integer);
8 Процедуры Особенности: в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не имеют к ним доступа program qq; procedure A(x, y: integer); var a, b: real; begin a := (x + y)/6;... end; begin... end. procedure A(x, y: integer); var a, b: real; begin a := (x + y)/6;... end; локальные переменные var a, b: real;
Процедура. Program PRIM; Var x, k, n: integer; PROCEDURE STEPEN (n, x: Integer; Var k: integer); Var i: Integer; Begin k:=1; Writeln (' Введите степень'); Read(x); For i:=1 TO x DO k:= k*n End; Begin Writeln('Введите число); Readln(n); STEPEN (n,x,k); Writeln ('k=', K); End. Program PRIM; Var x, k, n: integer; PROCEDURE STEPEN (n, x: Integer; Var k: integer); Var i: Integer; Begin k:=1; Writeln (' Введите степень'); Read(x); For i:=1 TO x DO k:= k*n End; Begin Writeln('Введите число); Readln(n); STEPEN (n,x,k); Writeln ('k=', K); End. Пример: Возвести число в N-ю степень. Заголовок Имя п/п Формальные параметры Тело процедуры Обращение к процедуре Локальные переменные Фактические параметры 9 Поиск Max элемента массивов а, b и их номера Пример работы программы
10 Процедуры Особенности: все процедуры расположены выше основной программы в заголовке процедуры перечисляются формальные параметры, они обозначаются именами и могут меняться при вызове процедуры в скобках указывают фактические параметры (через запятую или арифметические выражения) в том же порядке Procedure STEPEN (n: Integer; x: real; Var k: real); STEPEN (x, n, k); (n, x, k); x x n n k k Выходной параметр
11 Параметры-переменные Применение: таким образом процедура может возвращать несколько значений, Запрещенные варианты вызова Exchange ( 2, 3 ); { числа } Exchange ( x+z, y+2 ); { выражения } procedure Exchange ( a, b: integer ); var c: integer; begin c := a; a := b; b := c; end; procedure Exchange ( a, b: integer ); var c: integer; begin c := a; a := b; b := c; end; var параметры могут изменяться
Выделяются два основных класса формальных параметров: Параметры-значения – используются в качестве входных данных п/программы, при обращении к которой фактические параметры передают свое значение формальным и больше не изменяются. Параметры-переменные – используются как в качестве входных, так и в качестве выходных параметров. В заголовке процедуры перед ними указывается служебное слово Var. При обращении к п/пр. фактические параметры заменяют формальные. В качестве входных данных в п/пр. следует использовать параметры-значения. В качестве выходных – параметры- переменные. Данные, которые являются и входными, и выходными, следует описывать как параметры-переменные. Параметры-переменные 12
13 Задачи «A»: Напишите процедуру, которая переставляет три переданные ей числа в порядке возрастания. Пример: Введите три натуральных числа: «B»: Напишите процедуру, которая сокращает дробь вида M/N. Числитель и знаменатель дроби передаются как изменяемые параметры. Пример: Введите числитель и знаменатель дроби: После сокращения: 5/3