Подпрограммы 1 Определение подпрограммы. 2 Процедуры 3 Функции 4 Практическая работа
ПОВТОРЕНИЕ: Структура программы. В стандартном Паскале программы имеют строгий формат : program Имя - программы; Label метки ; Const описание констант ; type определения типов данных ; var описание переменных ; procedure и functions ; begin основное тело программы end.
Подпрограммы В программировании часто встречаются случаи, когда по ходу выполнения программы приходится производить одни и те же вычисления, но при различных исходных данных. Чтобы исключить повторение одинаковых записей и сделать тем самым программу проще и понятнее, можно выделить эти повторяющиеся вычисления в самостоятельную часть программы, которая может быть использована многократно по мере необходимости. Использование подпрограмм позволяет применять один из самых прогрессивных принципов программирования – структурное программирование. Автономная часть программы, реализующая определённый алгоритм, и допускающая обращение к ней из различных частей программы, называется подпрограммой.
Основные положения: Подпрограмма оформляется в виде замкнутого участка программы, имеющей чёткий вход и выход. Имена переменных в основной программе и в подпрограммах независимы друг от друга. В языке Паскаль выделяют два вида подпрограмм: процедуры (PROCEDURE) и функции (FUNCTION). Любая программа может содержать несколько процедур и функций и в свою очередь процедуры могут содержать встроенные процедуры. Процедуры и функции объявляются в разделе описания вслед за разделом переменных.
Процедуры Любая процедура оформляется в аналогично программе, т.е. содержит заголовок, разделы описаний и операторов. PROCEDURE имя ( формальные параметры); раздел описаний BEGIN раздел операторов END; Допускается использование процедур без параметров. Раздел описания процедуры состоит из тех же разделов, что и раздел описаний обычной программы.
Порядок выполнения процедуры: Выполнение программы начинается с выполнения операторов основной части программы. Как только происходит вызов подпрограммы данные из основной программы передаются в процедуру (входные параметры). После выполнения процедуры её выходные параметры передаются в то место программы, откуда был сделан вызов процедуры. Затем продолжается выполнение основной программы.
Пример взаимодействия программы и процедуры: Begin … Readln(a,b); Sum(a,b,c); Writeln(c); … End. Procedure Sum(a,b:integer; Var c:integer); Begin C:=a+b; End;
Область действия имён Имена, объявленные в разделе описания основной программы, действуют в разделе операторов основной программы и в любой подпрограмме. Эти имена называются глобальными. Имена, объявленные в подпрограмме, действуют только в этой подпрограмме и называются локальными. Формальные параметры представляют собой список переменных с указанием их типов. Для выделения выходных параметров перед ними ставится служебное слово VAR.
Пример оформления процедуры: Procedure Sum(a,b:integer; Var c:integer); Begin C:=a+b; End; Имя процедуры Входные параметры, передаются из основной программы в процедуру Выходные параметры, передаются из процедуры в основную программу Формальные параметры
Вызов процедуры: Вызов процедуры имеет следующую форму записи: имя процедуры (фактические параметры). Параметры, которые передаются в процедуру могут быть: переменными; константами; выражениями; Параметры, которые получают значения из процедуры, могут быть переменными.
Пример вызова процедуры: Рассмотрим процедуру sum, которую можно вызвать из основной программы следующим образом: sum (6, 8, Z); Это означает, что А:=6, В:=8, Z:=С. Procedure Sum(a,b:integer; Var c:integer); Begin C:=a+b; End;
Соответствия между формальными и фактическими параметрами: Между формальными и фактическими параметрами должно быть соответствие по количеству параметров, порядку их следования, по типу данных. Имена соответствующих формальных и фактических параметров могут быть одинаковыми и различными.
Пример: написать программу для перестановки значений переменных a, b, c в порядке возрастания, т.е. так, чтобы a<b<c program pr_1; var a,b,c:integer; procedure Swap(var x,y:integer); var t:integer; begin t:=x; x:=y; y:=t; end; begin writeln('vvedite 3 chisla'); readln(a,b,c); if a>b then swap(a,b); if b>c then swap(b,c); if a>c then swap(a,c); if a>b then swap(a,b); Writeln(a,' ',b,' ',c); readln; end.
Практическая работа: Используя процедуру для вычисления степени числа найти значение выражения: y=a 4 ×x 4 +a 3 × x 3 +a 2 ×x 2 +a 1 ×x 1 +a 0. Найти периметр треугольника, заданного координатами своих вершин (Процедура для определения длины отрезка) Даны вещественные числа a,b,c,d,e,f,g. Найти площадь пятиугольника. Определить функцию для расчёта площади треугольника по трём сторонам. a ed g cf b
Применение процедур при работе с массивами Процедура заполнения и вывода линейного массива program zap; const n=100; t=20; var a:array[1..t] of integer; procedure init(t,n:integer;var a:array of integer); var i:integer; begin randomize; for i:=1 to t do begin a[i]:=random(n); write (a[i],' '); end;writeln; end; begin init(t,n,a); end.
Практическая работа Используя процедуру заполнения линейного массива решить задачи: 1. Даны два одномерных массива целых чисел разной размерности. Найти среднее арифметическое элементов каждого массива и их сумму. Решить задачу для 3 массивов. 2. Даны два одномерных массива целых чисел одинаковой размерности. Подсчитать количество и сумму отрицательных элементов. Решить задачу для 3 массивов. 3. Даны три одномерных массива целых чисел одинаковой размерности. Сформировать 4-ый массив, каждый элемент которого равен максимальному элементу из трёх массивов.
Функции Функция – это другой вид подпрограммы. Она оформляется аналогично процедуре. Функция оформляется в следующем виде: FUNCTION имя (формальные параметры): тип; раздел описания BEGIN раздел операторов END; Вызывается функция по её имени с указанием фактических параметров. При этом вызов функции можно делать непосредственно внутри выражения.
ПРИМЕР : найти разность факториалов F=m!-k!. факториал числа n вычисляется как произведение n чисел натурального ряда: 1*2*3*...n. FUNCTION FACT (N : integer): longint; var i: integer; p: longint; BEGIN P:=1; For I:=1 To n Do P:=P*I; FACT:=P END; Вызывается функция по своему имени FACT c указанием фактических параметров М и К: F:=FACT(M)-FACT(K); Имя функции Формальный параметр
Различия между процедурой и функцией: 1. Функция, как и процедура, может иметь список параметров, следующих за именем функции в круглых скобках, но при описании функции указывается тип результата функции. 2. Имя процедуры используется только для её вызова, а с именем функции связывается её значение. 3. Процедура и функция отличаются и по способу вызова. Процедура вызывается своим именем с указанием фактических параметров, а функция вызывается в виде оператора присваивания, и может быть в списках оператора Write bk Writeln.(Разность факториалов, FACT(m)-FACT(k)); 4. Функция должна иметь в теле команду присваивания с именем переменной, имя которой совпадает с именем функции.