Что такое функция чем она отличается от процедуры
Перейти к содержимому

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

  • автор:

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

Процедура — это вспомогательный алгоритм, который исполняет некоторые действия.

Процедура записывается до основной программы и вызывается внутри неё.

Синтаксис процедуры

Процедура в Pascal

Процедура в Python

procedure название (параметры);

var. ;

begin

end;

def название (параметры):

#объявление переменной

#тело процедуры

Обрати внимание!

Имена переменных в процедуре не должны совпадать с именами в основной программе.

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

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

Синтаксис функции

Разница между процедурой и функцией в программировании

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

Определение

Функция в программировании — подпрограмма, вызываемая из других подпрограмм необходимое число раз.

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

Сравнение

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

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

Выводы TheDifference.ru

  1. Функция возвращает значение, процедура — нет.
  2. Заголовок функции обязательно содержит тип результата.
  3. В теле функции обязательно наличие оператора, присваивающего значение имени функции.
  4. Вызов процедуры требует отдельного оператора, вызов функции возможен в составе выражений.
  5. Имя процедуры необходимо для вызова, имя функции — для присвоения значения.
  6. На схемах алгоритмов вызов процедуры изображается в отдельном блоке, вызов функции — в блоке процесса или вывода.

Похожие статьи

(7 оценок, среднее: 4,71 из 5)

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

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

  1. Возвращаемое значение: Функция обычно возвращает значение в качестве результата своей работы. Она выполняет вычисления и возвращает результат обратно в вызывающую часть программы. Например, функция может принимать аргументы, обрабатывать их и возвращать результат в виде числа, строки или другого типа данных. Процедура, с другой стороны, может выполнять определенные действия, но не возвращает значения. Она может изменять состояние программы или выполнять действия, не требующие возвращаемого значения.
  2. Использование в выражениях: Функции часто используются в выражениях для выполнения вычислений или преобразований. Они могут быть вызваны внутри выражений, и их возвращаемое значение может быть использовано далее в вычислениях. Процедуры, с другой стороны, обычно вызываются для выполнения определенных действий, но их вызов не используется в выражениях или не влияет на результат вычислений.
  3. Сайд-эффекты: Функции часто следуют принципу «чистых функций», то есть их выполнение не имеет побочных эффектов и результат зависит только от входных аргументов. Это делает функции предсказуемыми и более легкими для тестирования и отладки. Процедуры, с другой стороны, могут иметь побочные эффекты, такие как изменение глобальных переменных, ввод/вывод данных или изменение состояния программы.
  4. Использование аргументов: Как функции, так и процедуры могут принимать аргументы. Однако функции обычно используют аргументы для выполнения вычислений и возвращают результат, основанный на этих аргументах. Процедуры могут использовать аргументы для передачи данных, но они обычно не возвращают результат, основанный на этих аргументах.

В разных языках программирования могут быть различия в терминологии и синтаксисе, связанные с функциями и процедурами. Например, некоторые языки могут называть процедуры «подпрограммами» или «методами». Однако основные концепции, описанные выше, остаются применимыми для понимания различий между функциями и процедурами.

Критерий Функция Процедура
Возвращаемое значение Всегда возвращает значение Не обязательно возвращает значение
Использование в выражениях Может быть использована в выражениях Не может быть использована в выражениях
Параметры Может принимать параметры Может принимать параметры
Действия Выполняет вычисления и возвращает результат Выполняет определенные действия без возвращения значения
Пример int square(int x)

void printMessage(string message)

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

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

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

Многие примеры в этой книге невелики по размерам (не более 30-40 строк), поэтому написать такие программы можно и без процедур. Иное дело — создание крупных программ в сотни, тысячи и десятки тысяч строк. Писать такие программы как нечто единое целое, без расчленения на относительно самостоятельные фрагменты, т.е. без структурирования, просто невозможно. Практически во всех языках программирования имеются средства структурирования. Языки, в которых предусмотрены такие механизмы, называются процедурно-ориентированными. К их числу принадлежит и Турбо Паскаль.

Процедурой в Турбо Паскале называется особым образом оформленный фрагмент программы, имеющий собственное имя. Упоминание этого имени в тексте программы приводит к активизации процедуры и называется ее вызовом. Сразу после активизации процедуры начинают выполняться входящие в нее операторы, после выполнения последнего из них управление возвращается обратно в основную программу и выполняются операторы, стоящие непосредственно за оператором вызова процедуры.

Для обмена информацией между основной программой и процедурой используется один или несколько параметров вызова. Как мы увидим дальше (см. гл. 8), процедуры могут иметь и другой механизм обмена данными с вызывающей программой, так что параметры вызова могут и не использоваться. Если они есть, то они перечисляются в круглых скобках за именем процедуры и вместе с ним образуют оператор вызова процедуры.

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

С примерами процедур и функций мы уже сталкивались — это стандартные процедуры чтения И записи READ, READLN, WRITE, WRITELN, функции ORD, CHR, математические функции и др. Стандартными они называются потому, что созданы одновременно с системой Турбо Паскаль и являются ее неотъемлемой частью. В Турбо Паскале имеется много стандартных процедур и функций. Наличие богатой библиотеки таких программных заготовок существенно облегчает разработку прикладных программ. Однако в большинстве случаев некоторые специфичные для данной прикладной программы действия не находят прямых аналогов в библиотеках Турбо Паскаля, и тогда программисту приходится разрабатывать свои, нестандартные процедуры и функции.

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

Не вдаваясь в дальнейшие подробности, попробуем составить собственную процедуру, чтобы пояснить сказанное. Пусть в этой процедуре преобразуется некоторая символьная строка таким образом, чтобы все строчные буквы заменялись соответствующими прописными. В Турбо Паскале имеется стандартная функция UPCASE (см. гл.4), которая выполняет аналогичные действия над одиночным символом. Наша процедура (назовем ее UPSTRING) будет преобразовывать сразу все символы строки, причем сделаем ее пригодной не только для латинских букв, но и для букв русского алфавита.

Разработку программы проведем в два этапа. Сначала сконструируем основную (вызывающую) часть программы. Ее действия очень просты: она должна ввести входную строку (назовем ее Sinp) с клавиатуры, преобразовать ее с помощью процедуры UpString в выходную строку Sout и напечатать результат. Эти действия нетрудно запрограммировать, например:

Procedure UpString(si: String; var s2: String);

Sinp, Sout : String;

WriteLn (‘ Результат: ‘,Sout)

В этой программе используется замещение процедуры UPSTRING так называемой «заглушкой», т.е. процедурой, в которой на самом деле не осуществляется нужных нам действий, а выходная строка просто копирует входную. (Однако эта программа синтаксически абсолютно правильна и при желании ее можно запустить на счет.) Заглушка понадобилась нам по двум причинам. Во-первых, приведенная программа очень проста, в ней отсутствует детальная реализация процедуры и это позволяет наглядно проиллюстрировать механизм ее описания. Во-вторых, на ее примере мы знакомимся с универсальным методом конструирования сложных программ, получившим название нисходящее программирование. В соответствии с этим методом создание программы начинается «сверху», т.е. с разработки самого главного, генерального алгоритма. На верхнем уровне обычно еще не ясны детали реализации той или иной части программы, поэтому эти части следует заменить временными заглушками. Желательно, чтобы временный вариант программы был синтаксически правильным, тогда можно его откомпилировать и убедиться в отсутствии в нем синтаксических ошибок. Такой прогон даст определенную уверенность перед разработкой и реализацией алгоритмов нижнего уровня, т.е. перед заменой заглушек реально работающими процедурами. Если реализуемый в заглушке алгоритм достаточно сложен, его вновь структурируют, выделяя главный алгоритм и применяя новые заглушки, и т.д. Процесс продолжается «вниз» до тех пор, пока не будет создан полностью работоспособный вариант программы.

В дальнейшем мы еще не раз будем использовать метод нисходящего программирования, а сейчас вернемся к описанию нашей процедуры. Как видим, это описание начинается зарезервированным словом Procedure, за которым следуют имя процедуры и список формальных параметров. Список параметров заключается в круглые скобки и содержит перечень параметров с указанием их типа. Заметим, что перед параметром s2, с помощью которого в вызывающую программу возвращается результат преобразования, стоит зарезервированное слово VAR. Именно таким способом компилятору указываются те параметры, в которых процедура возвращает вызвавшей ее программе результат своей работы (подробнее см. гл. 8). Зарезервированное слово Procedure, имя процедуры и список ее параметров образуют заголовок процедуры. За заголовком следует тело процедуры, содержащее новый раздел описаний (этот раздел пока еще пуст) и раздел исполняемых операторов (оператор s2 : = s1).

Приступим к разработке алгоритма процедуры. Для этого обратимся к таблице кодировки символов, используемой в ПК (см. прил. 2). В соответствии с этой таблицей коды символов латинских строчных букв от а до z образуют непрерывный массив монотонно нарастающих чисел от 97 до 122, а коды соответствующих им прописных букв — непрерывный массив чисел от 65 до 90. Преобразование строчных латинских букв в прописные, следовательно, состоит в уменьшении кода буквы на 32. Сложнее обстоит дело с символами русского алфавита (кириллицей). В зависимости от принятого способа кодировки русские строчные буквы могут образовывать один сплошной массив (кодировки ГОСТ и MIC), два массива (альтернативная кодировка), несплошной массив (кодировка типа ЕСТЕЛ), неупорядоченный массив (кодировка КОИ-8). Если исключить два последних варианта кодировки, использовавшихся на устаревших ПК, то задача преобразования буквы состоит в том, чтобы к внутреннему коду русской буквы А (для букв от а до п) или к коду буквы Р (для букв от р до я) прибавить разницу в кодах текущего символа и кодах букв а и и. Например, если преобразуется буква б, то к коду А нужно прибавить разницу между кодами а и б, т.е. единицу, в результате получим код буквы Б. Точно так же при преобразовании буквы ф к коду буквы П будет прибавлено число 5 (как разница кодов ф и п), поэтому в результате получится код буквы Ф. С учетом этого можно составить следующий алгоритм реализации процедуры: для каждого символа исходной строки s1 определить, к какому подмассиву a. z, a. p или п. я принадлежит код этого символа, и затем изменить его, добавив к кодам букв А (латинская), А (русская) или Я соответствующую разницу. Если символ не принадлежит ни к какому из подмассивов, нужно поместить его код в выходную строку без изменений.

Вот возможный вариант процедуры:

Procedure UpString(sl: String; var s2: String);

for i := 1 to Length(si) do

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *