Процедуры и функции Программирование на языке Паскаль Старший преподаватель кафедры Компьютерных систем в управлении и проектировании Потапова Евгения Андреевна Вопросы входного контроля - Для чего нужны подпрограммы ? - Является ли использование подпрограмм обязательным ? 2 Подпрограммы За исключением очень небольших программ, разработка программы предполагает ее представление в виде совокупности относительно независимых частей (модулей), называемых подпрограммами. Применение подпрограмм предоставляет следующие преимущества: 3 1) Существенно уменьшает трудоемкость программирования, так как разработку программы можно выполнять не целиком, а по частям; 2) Существенно сокращает память для размещения программы, так как выделив в подпрограмму многократно повторяющийся участок кода программы, достаточно выделить память лишь для одной подпрограммы, вызывая ее из различных мест программы; 3) Улучшает структуру программы, облегчая её понимание 4) Повышает устойчивость к ошибкам программирования при изменении программы 4 Программа на паскале Begin Primer; Primer; Подпрограмма Primer Begin End; end. Вызов подпрограммы из программы 5 При программировании на Паскале различают два типа подпрограмм: • Процедуры • Функции Процедуры применяются, когда нет необходимости возвращать в программу какое - либо значение. Функции применяются тогда, когда нужно вернуть какое - либо значение в программу, например, результат функции можно использовать в выражении. 6 Параметры процедур и функций. Параметры подразделяются на: • Формальные - те, что указаны в заголовке подпрограммы при её описании; • Фактические - те, которые используются при запуске подпрограммы в программе. • Параметры – значения – они подаются на вход подпрограммы своим значением, то есть перед запуском подпрограммы вычисляется значение переменной, записывается в буфер, это значение и используется в подпрограмме. • Параметры – переменные (Var) – они подаются на вход подпрограммы своим адресом, то есть в процессе выполнения подпрограммы значение этой переменной может быть изменено и новое значение будет доступно для внешней программы. 7 Процедуры и функции могут быть и без параметров! Например, стандартные процедуры: Writeln; Randomize; Readln; Если в пользовательской подпрограмме не указаны параметры, подпрограмма работает с глобальными переменными! 8 Описание процедур в разделе описаний программы: procedure primer({список формальных параметров}); {Это могут быть параметры-значения или параметры-переменные} var {описание локальных переменных}; Begin {Тело процедуры}; End; 9 Пример 1 написания процедуры. Дана квадратная матрица 3-го порядка и целое число n >0. Вычислить A n . При получении задания нужно определить, какие подпрограммы целесообразно разработать для решения этой программы. Разработаем процедуры • Формирования матрицы, • Вывода матрицы на экран, • Умножения матрицы на матрицу. 10 Блок – схемы для подпрограмм строятся отдельно! То есть, для каждой подпрограммы отдельная блок-схема, и отдельная блок-схема для программы. начало нет начало нет I=1,n да J=1,n нет да F[i,j]:= random(3); конец Блок-схема процедуры Vvod I=1,n да J=1,n да нет Writeln; Вывод (F[i,j]); конец Блок-схема процедуры Vivod 11 начало нет I=1,m да J=1,m нет да S:=0 нет c[i,j]:=s k=1,m да S:=s+a[i,k]*b[k,j] конец Блок-схема процедуры Umnog 12 начало 'Matrica A' Vvod(A) Vivod(A) Ввод степени B:=A Y=1,n-1 нет да Umnog(A,B,A) Vivod(A) конец Writeln; Блок-схема программы 13 Разберем пример 2. Составьте процедуру преобразования массива по следующему правилу: • Все отрицательные числа перенести в начало, в порядке их следования • Все положительные должны следовать после отрицательных, в порядке их следования Преобразовать таким образом три исходных массива. Для решения этой задачи создадим: • процедуру заполнения массива случайными числами, • процедуру преобразования массива по заданному правилу • процедуру вывода массива на экран 14 Блок-схема процедуры vvodmas Блок-схема процедуры vivod начало нет I=1,n да K[i]:= random(100)-60; конец начало нет I=1,n да Write(k[i]:4) конец 15 Блок –схема процедуры preobr нет Блок-схема программы начало начало J:=0; Ввод n I=1,n да да vvodmas(a) нет k[i]<0 j:=j+1; f[j]:=k[i]; vvivod(a) preobr(a) vvodmas(b) нет да I=1,n vivod(b) да нет k[i]>=0 preobr(b) j:=j+1; f[j]:=k[i]; … K:=f конец конец 16 Описание функций в разделе описаний программы: function prim({список формальных параметров}):{тип результата}; var {описание локальных переменных}; Begin {Тело функции}; prim:={результат}; End; 17 Разберем пример 3( с функциями): Дан массив целых чисел. Определить количество простых чисел в массиве. начало да K<2 нет t:=true t:=false i:=2 нет t and (i<k) да да k mod i = 0 нет Prost:=t t:=false конец i:=i+1 Блок-схема функции Prost 18 начало Ввод n нет j=1,n Количество простых чисел да a[j]:=random(45) Вывод a[j] j=1,n нет нет да Prost(a[j]) да Вывод kolp Вывод a[j] конец kolp:=kolp+1 Блок-схема программы 19 Разберем пример 4 (с функциями): . Программа. По заданным 4-элементным целым массивам x, y вычислить 4 4 4 2 2 2 x[ i ] если x[ i ] > y[ i ] i=1 i=1 i=1 V 4 x[ i ] y[ i ] иначе i=1 Для решения этой задачи создадим: • Функцию для нахождения суммы произведений соответствующих элементов массива • Процедуру для задания массива 20 начало нет начало I=1,m S:= 0; да F[i]:= random(5); i=1,m Вывод F[i] s:= s+a[i]*b[i]; sum:=s; конец конец Блок-схема процедуры Vvod Блок-схема функции Sum 21 начало Randomize; ‘Massiv X’ Vvod(x) ‘Massiv Y’ Vvod(Y) да Sum(x,x)>Sum(y,y) V:=sum(x,x) нет V:=sum(x,y) Вывод V конец Блок-схема программы 22 Вопросы по теме: • С какого служебного слова начинается описание процедуры? • С какого служебного слова начинается описание функции? • Могут ли процедуры и функции быть без параметров? 23 В ходе лекции были рассмотрены следующие вопросы: • процедуры ( PROCEDURE ) • функции (FUNCTION) • механизм параметров • примеры программ с процедурами • примеры программ с функциями 24 Спасибо за внимание! 25