На Горох
Информатика, 9 класс

§ 24. Процедуры

"Информатика", Поляков К.Ю., Еремин Е.А.

Объяснение темы В оглавлении: § 24. Процедуры

Кратко о теме

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

Объяснение темы

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

Определения и обозначения

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

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

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

Фактический параметр — значение или переменная, указанная при вызове процедуры вместо формального параметра. Например, если формальный параметр называется n, при вызове вместо него можно передать число 5. Сопоставление этих параметров позволяет процедуре работать с нужными данными.

Как это устроено

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

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

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

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

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

Элементы процедуры и их роль

ЭлементГде задаётсяНазначение
Имя процедурыВ заголовке описанияПозволяет обратиться к процедуре при вызове
Список формальных параметровВ заголовке описанияЗадаёт данные, которые процедура получает или использует для возврата результата
Тело процедурыВ описании процедурыСодержит команды, выполняющие действие
Вызов процедурыВ нужном месте основной программы или другой процедурыПередаёт управление её командам

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

Разбор задач

Строка-разделитель без параметров

Условие: составить процедуру, которая выводит строку-разделитель, и вызвать её несколько раз. Одна и та же строка не зависит от входных данных, поэтому формальные параметры не нужны. В примере используется запись на Паскале.

  1. Выбираем имя Divider и описываем процедуру: procedure Divider; begin writeln('----------'); end; Команда writeln выводит строку и переводит курсор на следующую строку.
  2. В основной части программы размещаем нужное количество вызовов: Divider; Divider; Divider;. Каждый вызов запускает тело процедуры заново.

Ответ: процедура Divider выводит разделитель, а три вызова выводят три строки. Если потребуется изменить вид разделителя, достаточно исправить команду в описании процедуры, а не каждое место вызова.

Квадрат переданного числа

Условие: составить процедуру, которая получает число и выводит его квадрат, а затем применить её к нескольким числам. Здесь число должно передаваться при каждом вызове, поэтому процедура получает формальный параметр n. Его значение можно менять, не переписывая тело процедуры.

  1. Описываем процедуру: procedure ShowSquare(n: integer); begin writeln(n * n); end;. Параметр n используется в вычислении, а команда writeln выводит результат.
  2. Вызываем её с разными фактическими параметрами: ShowSquare(3); ShowSquare(5);. Число в скобках при первом вызове связывается с n и затем то же происходит при втором.

Ответ: процедура выведет 9 и 25. Порядок аргументов важен даже в простом примере: именно переданное число становится значением n во время соответствующего вызова.

Наибольшее из двух чисел

Условие: получить два числа и вернуть их наибольшее значение через параметр, затем проверить процедуру на нескольких парах. В Паскале для такого изменения переменной, переданной при вызове, используют параметр var. Без указания var передача значения сама по себе не обещает изменения исходной переменной.

  1. Задаём параметры a и b для входных чисел, а m с пометкой var — для результата: procedure MaxOf(a, b: integer; var m: integer); begin if a > b then m := a else m := b; end;.
  2. Объявляем переменную результата m и вызываем MaxOf(4, 9, m);, затем, например, MaxOf(12, 7, m);. В каждом вызове первые два аргумента передают числа, а третий указывает, куда записать результат.

Ответ: после первой проверки m равно 9, после второй — 12. Так проверяется, что процедура выбирает большее число и записывает его в переменную результата.

Типичные ошибки

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

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

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

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

Связь с другими темами

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

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

Что запомнить

  • Процедура — именованный фрагмент программы для выполнения отдельного действия.
  • Команды процедуры выполняются при её вызове.
  • Описать процедуру достаточно один раз, а вызывать её можно многократно.
  • Фактические параметры при вызове передают данные формальным параметрам.
  • Число и порядок аргументов должны соответствовать описанию процедуры.
  • Локальные переменные доступны только внутри процедуры.

Частые вопросы по теме

Чем процедура отличается от обычного набора команд?

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

Можно ли вызвать процедуру несколько раз?

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

Зачем процедуре нужны параметры?

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

Чем формальный параметр отличается от фактического?

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

Почему локальную переменную нельзя использовать за пределами процедуры?

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

Спросить по теме параграфа

§ 24. Процедуры

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
9 класс
Учебник
"Информатика", Поляков К.Ю., Еремин Е.А.