03.02.2019
Новый выпуск журнала Автоматизация и программирование.
05.01.2019
Новый выпуск журнала Автоматизация и программирование.
25.12.2018
Новые видео и статья Процедура Delete.
20.12.2018
Новые видео и статья Особенности использования вложенных операторов.
15.12.2018
Новая задача Как преобразовать байт в килобайт.
Процедуры
![]() |
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Объявление процедуры определяет идентификатор процедуры и связывает этот идентификатор с блоком кода. Затем в коде программы вместо этого блока кода достаточно указать идентификатор процедуры и передать в процедуру параметры (при необходимости). Это называется вызовом процедуры.
Вызывать процедуру в программе можно любое количество раз. Более того, процедура может вызывать сама себя, организуя таким образом рекурсию (но это отдельная тема).
Объявление процедуры в Паскале выглядит так:
procedure Идентификатор(ВходныеПараметры; var ВходныеВыходныеПараметры); БлокПодпрограмм; begin ИсходныйКодПроцедуры; end;Это упрощённый синтаксис. Но для начала хватит и этого. Полный вариант см. в документации на среду разработки.
Итак, Идентификатор - это имя процедуры. Идентификатор составляется в соответствии с правилами конкретного языка программирования.
ВходныеПараметры - это список переменных, значения которых нужно передать в процедуру. Переменные могут быть разных типов. Для каждой переменной указывается её идентификатор и тип, после чего следует точка с запятой. Если передаётся несколько переменных одного типа, то идентификаторы можно перечислять через запятую, а тип указать только один раз. Например, приведённые ниже два объявления процедуры эквивалентны:
procedure Test(x, y : integer; c : char; var R : integer);
procedure Test(x : integer; y : integer; c : char; var R : integer);
Все передаваемые параметры являются локальными относительно процедуры, в которую эти параметры передаются. То есть переменные, связанные с этими параметрами, действуют только внутри процедуры, а из основной программы они не видны.
Поэтому, если есть необходимость получить какие-то данные из процедуры, то это можно сделать двумя способами: использовать глобальные переменные или использовать параметр с ключевым словом var.
ВходныеВыходныеПараметры - это параметры, которые также передаются в процедуру. Однако через эти параметры можно передать данные в основную программу.
Внутри процедуры также можно объявить локальные переменные. Но их идентификаторы не должны совпадать с идентификаторами параметров. Например,
procedure Test(x, y : integer; var R : integer); var x, y : byte; begin ... end;такой код вызовет ошибку.
А теперь пример использования процедуры:
var x, y, Res : integer; procedure Test(x, y : integer; var R : integer); begin x := x * 2; y := y * 2; R := x + y; end; {********************************************************************** ОСНОВНАЯ ПРОГРАММА **********************************************************************} begin x := 100; y := 50; Test(x, y, Res); //Вызываем процедуру WriteLn(x + y); //150 WriteLn(Res); //300 ReadLn; end.
Как видите, в теле процедуры мы удваиваем значения х и у, однако в теле основной программы эти значения остаются неизменными, потому что в основной программе используются глобальные переменные с такими же именами.
Более подробно область видимости переменных мы будем изучать позже.
См. также: