Процедуры в программировании. Подпрограмма.

07.01.2023 0 Автор : Марина Николаевна
Процедуры в программировании. Подпрограмма.

Подпрограмма: процедуры и функции

Подпрограмма — это отдельная часть программы, имеющая имя и решающая отдельную задачу.

Подпрограммы позволяют избежать от дублирования кода.

Если в разных местах программы необходимо повторить  один  и тот же код для решения одной и той же задачи, то нужно оформить алгоритм решения этой задачи как подпрограмму и вызывать ее по имени каждый раз, когда это требуется.

Из подпрограмм составляются библиотеки, которые  входят в состав языков программирования.

Программисты применяют библиотеки, думая о том, какую работу они выполняют, а не о том, какую работу они выполняют, а не о том, какие алгоритмы в них используются.

Библиотеки освобождает программиста от повторного исполнения работы, позволяет  воспользоваться работой других программистов.

Каждая отдельная подпрограмма решает всего одну задачу. Например, она может вычислять значение функции или выводить данные в файл. Подпрограмму, которая делает и то, и другое, очень сложно использовать. Достаточно представить себе ситуацию, когда требуется только вычислить результат, но не нужно записывать его в файл.

Подпрограммы бывают двух типов — процедуры и функции.

Подпрограммы — процедуры  выполняют некоторые действия. Например, print в языке программирования  Python — это стандартная подпрограмма -процедура, которая выводит данные на экран.

Простая процедура

Рассмотрим  пример простой процедуры.

Предположим, что в нескольких местах программы требуется выводить на экран строку из 10 знаков «_». Эта строка может понадобиться для разделения два блока результатов друг от друга.

Например:

print("-----------------")

Этот оператор вывода можно вставить там, где нужно вывести такую строку. 

Однако, это решение имеет несколько недостатков:

  1. строка из минусов будет храниться в памяти много раз
  2. если программист задумывает как-то как-то изменить эту строку (например, заменит знак «-» на «=»), нужно будет искать эти операторы вывода по всей программе.

Для таких случаев в языках программирования предусмотрены процедуры. Посмотрим на программу с процедурой:

def printLine():
print ("- - - - - - - - - -  -")
...
printLine()
...
printLine()

Многоточием в текстах программ программист обозначает некоторые операторы, которые на этом этапе пока не будем затрагивать.

Процедура в программе начинается со служебного слова def (от англ. define — определить). После имени процедуры записаны пустые скобки (чуть далее увидим, что скобки могут быть и не пустыми) и двоеточие.

Все команды, входящие в тело процедуры, записываются с отступом (так же как и команды, входящие в тело цикла или условного оператора).

Для того, чтобы процедура заработала, в основной программе (или в другой процедуре) необходимо её вызвать по имени (не забыв скобки), причем таких вызовов может быть сколько угодно (в нашем случае в программе — два).

Процедура должна быть определена к моменту ее вызова, т.е. должна быть выполнена команда def, которая создает объект — процедуру в памяти. Если процедура вызывается из основной программы, то нужно поместить определение процедуры раньше точки вызовы.

Использование процедур сокращает код, если какие-то операции должны выполняться несколько раз в разных местах программы. Кроме того, большую программу всегда разбивают на несколько подпрограмм для удобства, выделяя этапы сложного алгоритма. Такой подход делает всю программу более понятной и позволяет разделить работу между программистами.

Когда процедура уже написана и протестирована, можно передать ее другим программистам для использования в этом же или другом проекте.

Важно, чтобы автор процедуры подробно описал, что она делает, ее входные и выходные данные. Тем, кто использует готовую процедуру, нужно убедиться, что она выполняет именно то, что нужно в данной задаче.

Процедуры с параметрами

Существуют разные решения одной и той же задачи. Причем красивым решением считается то, которое содержит наименьшее число шагов для достижения поставленной цели.

Рассмотрим пример вывода строки из знаков «минус» разной длины (5,10 и т.д.).

def printLine5():
print("-----")
def printLine10():
print("----------")

Это решение не является красивым, т.к. обе процедуры выводят знак «минус» , только разное количество.

Процедуру printLine10 можно переписать, применив знак «умножения» строки на число (заменяющее, как и в математике, многократное сложение):

 

def printLine10():
print("-"*10)

Эта процедура делает то же самое, что и первый вариант — выводит 10 минусов подряд и переходит на новую строку.

В том случае, если мы хотим получить решение данной задачи при любых значениях количества «минусов», то можно внести в программу переменную, обозначающую количество минусов. Например, переменную n. 

В этом случае процедура будет выглядеть следующим образом:

def printLpne(n):
print("-"*n)

Величина n называют параметром процедуры. Теперь круглые скобки в заголовке процедуры не пустые. В них записано имя параметра — специальной переменной, с помощью которой можно управлять работой процедуры.

Параметр — это переменная, от значения которой зависит работа подпрограммы. Имена параметров перечисляются в заголовке подпрограммы.

Процедура printLine  имеет один параметр , обозначенный именем n, — это длина строки из минусов.

При вызове такой процедуры нужно в скобках передать ей фактическое значение, которое присваивается переменной n внутри процедуры:

printLine(10)

Такое значение называется аргументом (или фактическим параметром).

Аргумент — это значение параметра, которое передается подпрограмме при ее вызове.

Аргументом может быть только постоянное значение (число или символ), но также и переменная, и даже арифметическое выражение.

Процедуру можно улучшить. Например,  сделаем так, чтобы можно было изменять  не только длину строки, но и символы, из которых она строиться. С этой целью добавим в процедуру еще один параметр, который можно назвать symbol:

def printLine(symbol, n):
   print(symbol*n)

Имена параметров в заголовке процедуры отделяются запятой.

Чем больше параметров у процедуры, тем больше разных задач она может решить, но тем сложнее ее понимать и легче сделать ошибку. Поэтому не рекомендуется передавать в процедуру больше 3-4 параметров.