На уровне идей, всё ниже сказанное относится не только к языку Паскаль, но и к большинству других языков программирования. Исключением являются конкретные языковые конструкции (имён процедур), которые даны именно для Паскаля и некоторые механизмы реализации.
Процедура (подпрограмма) – большой (более или менее) фрагмент кода, который описан специальным образом один раз, но может вызываться из разных мест программы. Процедурами, а точнее – вызовами стандартных процедур, являются многие «популярные» команды, такие, как команды ввода/вывода (write, writeln, read и readln).
Описание и вызов процедур
Следует различать описание и вызов процедур.
Описание процедуры определяет, что именно и каким образом делает процедура, а также как её следует использовать в программе. Считается, что описание каждой процедуры (возможно — уже в виде готового программного кода) существует всегда, но может быть скрыто от разработчика. В соответствии с описанием процедуры, при порождается и встраивается в готовую программу реальный программный код, который исполняется в программе в момент вызова процедуры.
Информатика. Язык Pascal: Процедуры и функции в Pascal. Центр онлайн-обучения «Фоксфорд»
Не следует путать описание процедуры в программе с описанием процедуры в справочной системе или в сопровождающей документации. Последнее – просто текст, предназначенный для того, чтобы помочь программисту освоиться с применением процедуры.
Вызов процедуры – это применение процедуры в конкретном месте текста программы. В готовой программе ему соответствует некоторый стандартный механизм, который позволяет передать управление на код процедуры и затем вернуть его обратно коду самой программы.
Объявление процедуры – редко встречающаяся конструкция, которая провозглашает, что мы планируем использовать определённым образом некоторую процедуру, полное описание которой будет предоставлено позже в соответствующий момент. Примером является «косвенная рекурсия», когда процедура А использует в своём описании вызовы процедуры В, а процедура В, в свою очередь, использует вызовы процедуры А. Объявление процедуры указывает, что обращение к некоторому неописанному полностью объекту не является ошибкой, если производится в соответствии с этим объявлением. В готовом программном коде, соответствия объявлению нет, это механизм, который позволяет согласовать код программы с кодом процедуры
Функции
Функции – это специальный вид процедур, которые возвращают значения заранее оговоренного типа, т.е. вызовы функций могут заменять значения указанного типа в выражениях или в качестве параметров других процедур и функций. Например:
m:= round( i/j + frac(q) );
Их описание и применение несколько отличается от описания и применения просто «чистых» процедур.
Во многих современных версиях языков программирования, функции могут использоваться как процедуры. Например:
while keypressed do readkey;
Обратное — неверно. Неверный пример:
x:= z+read(z); Процедуры можно разделять по нескольким критериям. В данном случае, говоря о стандартных процедурах, процедуры неявно различаются по месту расположения кода.
#5 PYTHON: ФУНКЦИИ И ПРОЦЕДУРЫ
А именно: * стандартные добавляются в программу автоматически, пример – write; * стандартные библиотечные требуют указания в программе на необходимость подключения дополнительных системных библиотек (пример – keypressed, readkey, delay из CRT); * дополнительные библиотечные требуют установки в системе и подключения в коде программы дополнительных библиотек (пример – circle, setfillstyle, getcolor из graph или из нашей библиотеки oglgraph); * собственные библиотечные требуют создания, установки в системе и подключения в коде программы дополнительных библиотек; * локальные описываются в программе. Библиотеки могут * поставляться изначально как стандартные, в составе инструментов разработчика вместе с компилятором, отладчиком и т.д. * создаваться программистом или его коллегами для себя; * создаваться и распространяться некоторой третьей стороной.
Иначе говоря, Вы можете описать самостоятельно или получить со стороны специальным образом оформленный маленький алгоритм (подпрограмму), решающий частную задачу, и включить его качестве простого действия в свой более сложный алгоритм (программу). При этом, описание можно сделать таким образом, что ваш алгоритм будет применим к более или менее широкому набору объектов, с которыми работает общий алгоритм.
Пример, на примере сортировки массива по возрастанию значений с помощью сортировки выбором. Идея сортировки в следующем: Массив рассматриваем как состоящий в каждый момент работы программы из двух частей — сортированной и несортированной. Сами части будут меняться! В начале считаем, что несортированная часть занимает весь массив, а сортированная — всё остальное, 1) Находим максимальный во всём массиве элемент. В рассматриваемой части массива uses allForSorting; Библиотека «Всё для сортировки».
// Скорее всего — не существует в реальности. // Содержит ВСЁ (происхождение чего мы не хотим объяснять)
n=1000; // Размер массива. Выбран по принципу — «а почему бы и нет?»
ArrayType = array[1..N] of integer; // Описание типа («устройства») сортируемого массива
SortedA : ArrayType; // Объявление самого сортируемого массива
FillArray (SortedA); // Заполняем наш массив начальными значениями PrintArray(SortedA); // Показываем, что получилось. SortArray (SortedA); // Сортируем наш массив «таинственным способом». PrintArray(SortedA); // Показываем, что получилось
Важно то, что с помощью механизма передачи параметров, подобный фрагмент кода способен выполнять одни и те же действия с разными объектами, т.е. значениями(константами), переменными и выражениями. Например, вычислять кубический корень из заданного числа, сортировать произвольный массив с элементами указанного типа, отбрасывать ненужные пробелы в указанной строке и т.д.
Описание процедуры – это общее описание алгоритма, реализующегося в процедуре, средствами используемого языка программирования. Многие системы программирования позволяют получить программу, собранную из фрагментов, написанных на нескольких языках программирования. Например — с ассемблерными вставками, т.е. фактически — с непосредственным использованием команд процессора.
В программе может содержатся предварительное описание или объявление процедуры, которое описывает, как должна вызываться процедура, т.е. указывает ее имя и порядок подстановки параметров, но не описывает алгоритма процедуры. В частности, оно используется для присоединения программ, написанных на ассемблере.
Вызов процедуры – применение ранее описанного алгоритма к конкретно указанным объектам уже при работе программы.
При описании алгоритма процедуры, используются формальные параметры, которые не являются реальными объектами, доступными для дальнейшего использования в программе. При вызове процедуры, происходит подстановка
Функция – специальным образом оформленная процедура, которая возвращает значение определённого типа. Это означает, что вызов функции приводит в вычислению значения данного типа, которое может может быть использовано. Вызов функции одновременно является выражением и может быть использован везде, где может быть использовано другое выражение, вычисляющее значение данного типа, т.е. в качестве присваиваемого значения, в более сложном выражении или при подстановке параметра при вызове другой процедуры или функции.
Например, алгоритм сортировки выбором (по возрастанию) требует нахождения максимального элемента на различных частях массива, а также.
Большинство языков программирования позволяют оформлять многократно используемый код в виде процедур и/или функций. Целью написания процедур может быть:
минимизация написания повторяющегося кода — когда программисту приходится несколько раз разрабатывать и описывать идентичные последовательности команд, решающих одинаковые задачи, подразумеваются излишние затраты времени разработчика; минимизация включения повторяющегося кода — когда в программу включается в различных местах программы множество одинаковых или практически одинаковых фрагментов;
Источник: wiki.nsunc.com
5. Подпрограммы (процедуры и функции)
Подпрограмма – относительно самостоятельная часть программы, имеющая свое имя и выполняющая определенные действия.
Подпрограммы повышают надежность и наглядность программ, т.к. позволяют разрабатывать и отлаживать каждый блок программы независимо (например, разными людьми).
Структура подпрограммы почти полностью повторяет структуру всей программы и состоит из следующих частей:
- заголовок подпрограммы
- раздел описаний
- тело подпрограммы
5.1 Процедуры
procedure (список формальных параметров); ; begin тело процедуры>; end; Пример 1: Процедура вычисления и вывода на экран куба числа. procedure cub(x: real); var y: real; begin y:=x*x*x; writeln(y); end; Указание имени процедуры в программе приводит к активизации процедуры и называется ее вызовом. Сразу после активизации процедуры начинают выполняться входящие в нее операторы.
После выполнения последнего оператора процедуры управление передается в основную программу и далее выполняются операторы, следующие за вызовом процедуры. Процедура может вызываться в основной программе неоднократно.
Например: cub(5); … readln(z); cub(z); Для обмена информацией между основной программой и процедурой используются параметры, которые придают процедуре универсальность. Пример 2: Программа, выводящая на экран следующее: ********* a=1 b=1 ********* a=2 b=4 ********* a=3 b=9 ********* a=4 b=16 ********* var a,b: integer; procedure Stars; var i: integer; begin for i:=1 to 9 do write(‘*’); writeln; end; begin Stars; for a:=1 to 4 do begin b:=sqr(a); writeln(‘a=’,a,’ b=’,b); Stars; end; end. Пример 3: var a,b: integer; procedure Stroka(ch: char, n: integer); var i: integer; begin for i:=1 to n do write(ch); writeln; end; begin Stroka(‘+’,4); for a:=1 to 3 do begin b:=sqr(a); writeln(‘a=’,a,’ b=’,b); Stroka(‘*’,8); end; end. Разберем вызов процедуры Stroka(‘*’,8): ‘*’ и 8 – фактические параметры (т.е. те, которые указаны в скобках после имени процедуры при ее вызове), они присваиваются при вызове формальным параметрам ch и n (т.е. тем, которые указаны в скобках после имени процедуры при ее описании). Замечание: количество, порядок и тип параметров при вызове процедуры должны совпадать с количеством, порядком и типом параметров, заданным при описании процедуры. Результат на экране: ++++ a=1 b=1 ******** a=2 b=4 ******** a=3 b=9 ********
Источник: studfile.net
Чем отличаются понятия функции, процедуры и метода в программировании?
Периодически вижу все 3 определения. Это одно и то же или же что-то разное, и какое из понятий правильнее всего употреблять?
- Вопрос задан более трёх лет назад
- 76080 просмотров
Комментировать
Решения вопроса 2
Функция — подпрограмма, выполняющая какие-либо операции и возвращающая значение.
Процедура — подпрограмма, которая только выполняет операции, без возврата значения.
Метод — это функция или процедура, которая принадлежит классу или экземпляру класса.
Ответ написан более трёх лет назад
Нравится 30 5 комментариев
Забыли сказать, что у функции, процедуры и метода должно быть имя и параметры (или ничего, но скобки нужны в любом случае)
MaxLich, Ничего я не забыл. Это не имеет отношения к вопросу. Вопрос был: чем отличаются. А то что функция/процедура/метод имеет имя и список рациональных параметров это и так очевидно. Скобки — это вообще деталь реализации.
«Процедура», имхо, устаревшее понятие. Просто функция, которая не возвращает ничего (void). Это еще во времена Delphi процедура имела отдельное ключевое слово.
D3lphi, Ну я-то про определения, которые Вы дали. Это не просто подпрограмма, а подпрограмма, имеющая имя. Инициализатор (в джаве), например, тоже блок кода, подпрограмма, но имени не имеет, и параметров тоже, поэтому это не функция/метод.
MaxLich, это не определения, а лишь то, чем эти понятия отличаются друг от друга.
Функция/процедура не обязана иметь имя — анонимные функции, как пример.
Всё это можно свести к понятию — подпрограмма. Бывает, читаешь книгу, там автор пишет о своём куске кода как о методе, потом его начинает называть функцией.
Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать
Ответы на вопрос 4

Функция — подпрограмма, выполняющая какие-либо операции и возвращающая значение.
Процедура — подпрограмма, которая только выполняет операции, без возврата значения.
Метод — это функция или процедура, которая принадлежит классу или экземпляру класса.
как бы да, но. только на самом начальном этапе, что бы угомонить хаос в голове новичка ))
в дальнейшем, все интереснее все эти понятия контекстно зависимые, контекстом является парадигма программирования и/или конкретный язык
1 — в контексте парадигм, из данных понятий уникально одно Метод, как уже было сказано D3lphi, это нечто принадлежащее классу. класс, в свою очередь, это фундаментальное понятие ООП основанного на классах (шарм ситуации в том, что ООП бывает тоже разное ;))
в этом случае чаще принято уточнять что метод — это один из видов челнов класса (бывают еще поля, свойства, интерфейсы но это уже контекст конкретного языка) .. и как верно заметил Griboks — он реализуется функцией или процедурой
но .. есть много языков, где понятия метод нет вообще
а еще есть функциональное программирование .. эта парадигма частично присутствует во многих современных языках, однако есть языки, где любой код только функция
2 — из контекста языков:
понятие процедура в явном виде, чаще всего употребляют преподаватели, которые сами учились на языках типа Fortran, Pascal или родственных, и либо не имели другого опыта вообще, либо иной опыт был на много скромнее
сейчас доминируют языки, основывающиеся на Си синтаксисе, даже java и js в данном вопросе станут родственниками классического Си
а в нем нет понятия процедуры, только функции.. а на случай, когда функция не обязана возвращать какую либо величину, просто указывается тип возвращаемого значения void
смешение всего этого на примере C# — в этом языке, все есть объект. а любой исполняемый код это метод, и методы реализуются только функциями (в тч void функциями)
Источник: qna.habr.com