Модульное программирование 1











![Описание функции function имя [(список формальных параметров) ] : тип результата; [Описание локальных Описание функции function имя [(список формальных параметров) ] : тип результата; [Описание локальных](https://present5.com/presentation/3/159928527_437534301.pdf-img/159928527_437534301.pdf-12.jpg)












![1 Описание процедур procedure Имя(Параметры) ; [Локальные переменные] 1 Описание процедур procedure Имя(Параметры) ; [Локальные переменные]](https://present5.com/presentation/3/159928527_437534301.pdf-img/159928527_437534301.pdf-25.jpg)






















Модульное программирование 1
Раздел 1 ПОДПРОГРАММЫ 2
ПОДПРОГРАММЫ 1. Понятие подпрограммы. Механизм вызова. Виды подпрограмм. 2. Подпрограмма – функция 3. Подпрограмма – процедура 4. Глобальные и локальные переменные 5. Формальные и фактические параметры 3
1. Понятие подпрограммы. Механизм вызова. Виды. 4
Подпрограммы Подпрограмма – это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы. Записывается однократно, а в соответствующих местах программы происходит вызов по имени подпрограммы. 5
Подпрограммы Подпрограмма – это самостоятельный алгоритм, который может многократно использоваться при решении более общей задачи 6
Механизм вызова Основная программа подпрограмма … … Вызов Точка подпрограммы вызова … … Вызов подпрограммы 7
Подпрограммы позволяют: 1. Упростить структуру программы (повышение степени абстракции) 2. Избежать избыточности кода (не повторять одно и то же в разных частях) 3. Уменьшить вероятность ошибок и упростить процесс отладки программы 8
Виды подпрограмм: 1. Процедуры – подпрограмма, которая может не возвращать в основную программу значения переменных 2. Функции – подпрограмма, которая обязана возвращать в основную программу значения переменных 9
2. Подпрограмма - функция Функция – подпрограмма, которая обязательно имеет один выходной параметр, передаваемый через ее имя. Дополнительно может иметь любое количество входных и выходных параметров. 10
Подпрограмма - функция Виды: 1. Стандартные (описаны в модуле System). Вызываются без предварительного описания. 2. Пользовательские (определяются программистом в разделе процедур и функций программы или в созданном модуле) 11
Описание функции function имя [(список формальных параметров) ] : тип результата; [Описание локальных переменных] begin тело функции имя: =значение end; 12
Вызов функции В основной программе в правой части оператора присваивания: Имя переменной: = имя функции(список фактических параметров) Y: =SIN(X) или Число и тип формальных и фактически С: =Summa(3, 6); параметров должно совпадать с точностью до их следования! 13
Примеры функций (1) Var K, N, Res : Byte; function Sum(A, B : Byte) : Byte; begin Sum : = A + B; end; Begin readln(K, N); Res : = Sum(K, N); End. 14
Примеры функций (2) Var K, N, Res : Byte; function Sum : Byte; begin Sum : = K + N; end; Begin readln(K, N); Res : = Sum; End. 15
Примеры функций (3) Var X, Y, Res : Real; function Del(A, B : Real, Var R : Real) : Boolean; begin if B = 0 then Del : = False else begin R : = A / B; Del : = True end; Begin readln(X, Y); if Del(X, Y, Res) then writeln(Res: 12: 4) else writeln(‘Деление на ноль’) End. 16
Примеры функций (4) Var Res : Real; Const X = 20; Y = 7; function Del(A, B : Real, Var R : Real) : Boolean; begin if B = 0 then Del : = False else begin R : = A / B; Del : = True end; Begin if Del(X, 7, Res) then writeln(Res: 12: 4) else writeln(‘Деление на ноль’) End. 17
Примеры функций (5) Var X, Res : Real; N : Byte; function Step(A : Real, M : Byte) : Real; Var J : Byte; Y : Real; begin Y : = 1; for J: =1 to M do Y : = Y * A; Step : = Y end; Begin readln(X, N); Res : = Step(X, N); writeln(Res: 12: 4) End. 18
1 Примеры функций (6) Найти разность средних арифметических значений двух вещественных массивов из 10 элементов. 19
2 Примеры функций (6_продолжение) {Раздел описания} Const N=10; Type mas = array [1. . N] of real; Var a, b: mas; I : integer; dif : real; 20
3 Примеры функций (6 _продолжение) {Раздел описания} function Average(X : mas) : Real; Var i : integer; av: real; begin av : = 0; for i: =1 to n do av : = av+x[i]; Average: =av/n; end; 21
4 Примеры функций (6 _продолжение) {Основная программа} Begin for i: =1 to n do read (a[i]); for i: =1 to n do read (b[i]); dif: = average(a)- average(b); Writeln (‘Разность значений ’, dif: 6: 2) end. 22
3. Подпрограмма - процедура 23
Процедура – подпрограмма, которая может быть без параметров. Также может иметь любое количество входных и выходных параметров. Вызывается по имени: Writeln (X, Y) 24
1 Описание процедур procedure Имя(Параметры) ; [Локальные переменные] begin операторы ; end; 25
2 Описание процедур procedure Имя 1(Параметры) ; begin операторы ; end; procedure Имя 2 ; {Локальные переменные} begin операторы ; end; 26
Примеры процедур (1) Var K, N, Res : Byte; procedure Sum. P(A, B : Byte, Var Result : Byte); begin Result : = A + B; end; Begin readln(K, N); Sum. P(K, N, Res); End. 27
Примеры процедур (2) Var K, N, Res : Byte; procedure Sum. P; begin Res : = K + N; end; Begin readln(K, N); Sum. P; writeln(Res); End. 28
Примеры процедур (3) Var X, Y, Res : Real; Code. E : Boolean; procedure Del. P(A, B : Real, Var R : Real; Var Err : Boolean); begin if B = 0 then Err : = True else begin R : = A / B; Err : = False end; Begin readln(X, Y); Del. P(X, Y, Res, Code. E); If Not Code. E then writeln(Res: 12: 4) else writeln(‘Деление на ноль’) End. 29
1 Примеры процедур (4) Найти разность средних арифметических значений двух вещественных массивов из 10 элементов. 30
2 Примеры процедур (4 продолжение ) {Раздел описания} Const N=10; Type mas = array [1. . N] of real; Var a, b: mas; I : integer; dif, av_a, av_b, : real; 31
3 Примеры процедур (4 продолжение ) {Раздел описания} Procedure Average(X : mas; var av: real); Var i : integer; begin av : = 0; for i: =1 to n do av : = av+x[i]; av: =av/n; end; 32
4 Примеры процедур (4 продолжение ) {Основная программа} Begin for i: =1 to n do read (a[i]); for i: =1 to n do read (b[i]); average (a, av_a); average (b, av_b); Dif: = av_a- av_b; Writeln (‘Разность значений ’, dif: 6: 2) end. 33
4. Глобальные и локальные переменные 34
Глобальные переменные § Глобальными называются переменные, описанные в основной программе. § Переменные, которые не были инициализированы явным образом, перед началом выполнения программы обнуляются. § Время жизни глобальных переменных - с начала программы и до ее завершения. § Глобальные переменные доступны в любом месте программы или подпрограммы, кроме тех подпрограмм, в которых описаны локальные переменные с такими же именами. 35
Локальные переменные § Описываются внутри подпрограмм. § Значения локальных переменных между двумя вызовами одной и той же подпрограммы не сохраняются и эти переменные предварительно не обнуляются. § Локальные переменные могут использоваться только в подпрограмме, в которой они описаны, и всех вложенных в нее. 36
5. Формальные и фактические параметры 37
Формальные и фактические параметры § Фактические параметры - передаются процедуре при обращении к ней. § Формальные параметры – это переменные, фиктивно присутствующие в процедуре и определяющие тип и место подстановки фактических параметров, над которыми производятся действия. Число и тип формальных и фактических параметров должны совпадать с точностью до их следования. Описание Procedure A 1(x 1, x 2: integer; a, b: char); . . Вызов: A 1(x, y, z, f) X, Y: должны быть типа integer Z, F: типа char 38
Виды формальных параметров подпрограмм • Значения • Переменные • Константы • Нетипизированные параметры • Открытые массивы и строки • Процедурные и функциональные параметры • Объекты 39
Параметры-значения Описывается в заголовке подпрограммы: имя : тип; Например, передача в процедуру Р величины целого типа записывается так: procedure P(x : integer); Имя параметра может быть произвольным. Параметр х можно представить себе как локальную переменную, которая получает свое значение из главной программы при вызове подпрограммы. В подпрограмму передается копия значения аргумента. 40
Параметры-значения. Механизм передачи параметра 1. Из ячейки памяти, в которой хранится переменная, передаваемая в подпрограмму, берется ее значение и копируется в область оперативной памяти, называемую областью параметров. 2. Подпрограмма работает с этой копией, следовательно, доступа к ячейке, где хранится сама переменная, не имеет. По завершении работы подпрограммы стек освобождается. Такой способ называется передачей по значению. 41
Параметры-значения При вызове подпрограммы на месте параметра, передаваемого по значению, может находиться выражение. Тип выражения должен быть совместим по присваиванию с типом параметра. Например, если в вызывающей программе описаны переменные var x : integer; c : byte; y : longint; то следующие вызовы подпрограммы Р, ( procedure P(x : integer); ) будут синтаксически правильными: P(x); P(c); P(y); P(200); P(x div 4 + 1); 42
Недостатки передачи по значению 1. Затраты времени на копирование параметра 2. Затраты памяти в стеке и опасность его переполнения, когда речь идет о параметрах, занимающих много места - например, массивах большого размера. Более правильно использовать для передачи в подпрограмму исходных данных параметры-константы 43
Параметры-переменные Признаком параметра-переменной является ключевое слово var перед описанием параметра: var имя : тип; Например, передача в процедуру Р параметра- переменной целого типа записывается так: procedure P(var x : integer); 44
Параметры-переменные При вызове подпрограммы в область параметров копируется не значение переменной, а ее адрес, и подпрограмма через него имеет доступ к ячейке, в которой хранится переменная. Этот способ передачи параметров называется передачей по адресу. Подпрограмма работает непосредственно с переменной из вызывающей программы и, следовательно, может ее изменить. ВНИМАНИЕ! При вызове подпрограммы на месте параметра- переменной может находиться только ссылка на переменную точно того же типа. 45
§ Константы § Нетипизированные параметры § САМОСТОЯТЕЛЬНО! 46
http: //www. pascal 7. ru/ 47

