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

Подпрограммы, процедуры и функции | 11 класс

🧩 Подпрограммы: процедуры и функции
Структуризация программ, модульность, повторное использование кода

📌 Что такое подпрограмма?

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

  • разбить сложную задачу на простые шаги (декомпозиция);
  • избежать дублирования кода;
  • упростить отладку и тестирование;
  • повысить читаемость программы.

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

🔧 Процедуры и функции: в чём разница?

В большинстве языков программирования подпрограммы делятся на два типа:

ТипОписаниеПример (Python)
ПроцедураВыполняет действия, но не возвращает значение. В Python аналог — функция, которая ничего не возвращает (или возвращает None).def print_hello(): print("Hello!")
ФункцияВыполняет вычисления и возвращает результат (через return). Может использоваться в выражениях.def add(a, b): return a + b

В Pascal процедура и функция оформляются отдельными конструкциями, в Python различия менее формальны, но принцип тот же: если есть return — функция, иначе — процедура.

📤 Параметры и аргументы

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

Различают несколько способов передачи параметров:

  • По значению — подпрограмма получает копию значения, изменения внутри не влияют на исходную переменную.
  • По ссылке — подпрограмма работает с исходной переменной (например, через var в Pascal или изменяемые объекты в Python).
# Пример в Python: параметры по значению (неизменяемые типы)
def change(x):
    x = 10          # меняется локальная копия
a = 5
change(a)
print(a)            # 5, исходное значение не изменилось

# Для изменяемых объектов (списки) изменения видны снаружи
def append_element(lst):
    lst.append(100)
my_list = [1,2,3]
append_element(my_list)
print(my_list)      # [1,2,3,100]

🌐 Область видимости

  • Локальные переменные объявляются внутри подпрограммы и доступны только в ней.
  • Глобальные переменные объявляются вне всех подпрограмм и доступны везде. Их использование внутри подпрограмм требует осторожности (в Python для изменения глобальной переменной нужно ключевое слово global).
# Python: глобальная и локальная переменные
x = 10                  # глобальная
def test():
    y = 5               # локальная
    global x
    x = x + 1           # изменяем глобальную
    print(x, y)

test()                  # 11 5

🔄 Рекурсия

Рекурсия — это способ организации подпрограммы, при котором она вызывает саму себя. Рекурсия позволяет элегантно решать задачи, разбивающиеся на аналогичные подзадачи (вычисление факториала, обход деревьев, быстрая сортировка и т.д.).

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

# Пример: рекурсивное вычисление факториала
def factorial(n):
    if n <= 1:
        return 1          # базовый случай
    else:
        return n * factorial(n - 1)   # рекурсивный вызов

print(factorial(5))     # 120

✍️ Практические задания (выполняются в тетради)

  1. Дайте определения: запишите своими словами, что такое подпрограмма, процедура и функция. Приведите по одному примеру из реальной жизни, иллюстрирующему каждый тип.
  2. Заполните таблицу. Для каждого из приведённых ниже описаний определите, нужна ли процедура или функция, и укажите, какие параметры она должна принимать.
ЗадачаТип (процедура/функция)Параметры (входные/выходные)
Вывести на экран таблицу умножения для заданного числа
Вычислить площадь прямоугольника по его сторонам
Поменять местами значения двух переменных
Проверить, является ли число чётным
  1. Анализ области видимости. Рассмотрите фрагмент кода на Python:
    a = 5
    def f():
        b = 10
        global a
        a = a + 1
        print(a, b)
    f()
    print(a)
    Ответьте на вопросы:
    • Какая переменная является глобальной?
    • Какая переменная является локальной?
    • Что будет выведено на экран после вызова f()?
    • Что будет выведено после завершения работы функции?
  2. Рекурсивный вызов. Нарисуйте в тетради схему (дерево) рекурсивных вызовов для функции factorial(4) (пример из теории). Укажите каждый вызов, возвращаемое значение и покажите, как в итоге получается результат.
  3. Проектирование подпрограмм. Опишите (на естественном языке или псевдокоде) набор подпрограмм для решения следующей задачи:
    «Даны два массива целых чисел одинаковой длины. Необходимо вычислить скалярное произведение этих массивов (сумму попарных произведений) и вывести результат на экран. Если длина массивов разная, выдать сообщение об ошибке.»
    Укажите, какие подпрограммы (процедуры/функции) вы бы создали, какие параметры они бы принимали, и как бы они взаимодействовали друг с другом.

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

📘 Контрольные вопросы для самопроверки
  • Что такое подпрограмма? Какие преимущества даёт её использование?
  • Чем процедура отличается от функции?
  • Что такое формальные и фактические параметры?
  • Какие способы передачи параметров существуют?
  • Что такое локальные и глобальные переменные? В чём разница в области видимости?
  • Что такое рекурсия? Приведите примеры задач, где рекурсия удобна.
  • Как в Python объявить функцию, которая изменяет глобальную переменную?

отправка конспекта и практической части на проверку