мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Это старая версия документа!


Процедуры и функции

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

Процедура (подпрограмма) – большой (более или менее) фрагмент кода, который описан один раз, но может вызываться из разных мест программы. Процедурами, вернее – вызовами стандартных процедур, являются многие команды, такие, как команды ввода/вывода - write, writeln, read и readln.

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

  • стандартные добавляются автоматически,
  • библиотечные требуют подключения внешних библиотек, т.е. наборов дополнительных описаний различных объектов (пример – keypressed, readkey, delay из CRT),
  • локальные описываются в программе.

Библиотеки могут

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

Иначе говоря, Вы можете описать самостоятельно или получить со стороны специальным образом оформленный маленький алгоритм (подпрограмму), решающий частную задачу, и включить его качестве простого действия в свой более сложный алгоритм (программу). При этом, описание можно сделать таким образом, что ваш алгоритм будет применим к более или менее широкому набору объектов, с которыми работает общий алгоритм.

Пример, на примере сортировки массива по возрастанию значений с помощью сортировки выбором.

Идея сортировки в следующем: Массив рассматриваем как состоящий в каждый момент работы программы из двух частей - сортированной и несортированной. Сами части будут меняться! В начале считаем, что несортированная часть занимает весь массив, а сортированная - всё остальное, 1) Находим максимальный во всём массиве элемент. В рассматриваемой части массива

| Крайне общий алгоритм программы сортировки массива
uses allForSorting;         // Библиотека "Всё для сортировки". 
                            // Скорее всего - не существует в реальности.
                            // Содержит ВСЁ (происхождение чего мы не хотим объяснять)
 
const 
  n=1000;                   // Размер массива. Выбран по принципу - "а почему бы и нет?"
 
type
  ArrayType = array[1..N] of integer;
                            // Описание типа ("устройства") сортируемого массива
var
  SortedA : ArrayType;      // Объявление самого сортируемого массива
 
begin
  FillArray (SortedA);      // Заполняем наш массив начальными значениями
  PrintArray(SortedA);      // Показываем, что получилось.
  SortArray (SortedA);      // Сортируем наш массив "таинственным способом".
  PrintArray(SortedA);      // Показываем, что получилось
 
end.

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

Описание процедуры – это общее описание алгоритма, реализующегося в процедуре, средствами используемого языка программирования. Многие системы программирования позволяют получить программу, собранную из фрагментов, написанных на нескольких языках программирования. Например - с ассемблерными вставками, т.е. фактически - с непосредственным использованием команд процессора.

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

Вызов процедуры – применение ранее описанного алгоритма к конкретно указанным объектам уже при работе программы.

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

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

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

Большинство языков программирования позволяют оформлять многократно используемый код в виде процедур и/или функций. Целью написания процедур может быть:

минимизация написания повторяющегося кода - когда программисту приходится несколько раз разрабатывать и описывать идентичные последовательности команд, решающих одинаковые задачи, подразумеваются излишние затраты времени разработчика; минимизация включения повторяющегося кода - когда в программу включается в различных местах программы множество одинаковых или практически одинаковых фрагментов;

стандартизация кода