Процедуры и функции
Автор Владимир Весёлый задал вопрос в разделе Другие языки и технологии
PASCAL. В чем отличие процедур от функций. И любую ли задачу можно решить с помощью функции? и получил лучший ответ
Ответ от Krab Вark[гуру]
Процедуры и функции в Паскале - это подпрограммы, но имеют ключевое отличие. Функция всегда возвращает одно значение определенного типа, которое можно использовать в выражениях. Результат присваивается имени функции внутри ее тела. Процедура не возвращает значение, она выполняет действия и вызывается отдельным оператором. Синтаксически функция описывается через function с указанием типа возвращаемого значения, а процедура - через procedure без типа результата. Любую задачу можно решить как с помощью функции, так и с помощью процедуры. Если нужно получить результат вычислений - удобнее функция. Если нужно выполнить действия или получить несколько результатов через параметры-переменные - удобнее процедура. Фактически они взаимозаменяемы, выбор зависит от удобства и стиля программирования.
Процедура что-то делает и ничего не возвращает...
а функция что-то делает и возвращает результат своей работы
главное наверное в количестве выходных данных
у процедуры может быть несколько или вообще не быть выходных данных
а у функции выходное всегда одно и его значение записывается в имя функции
Функция – это подпрограмма, которую вызывают, чтобы выполнить какие-то расчеты или проверки. Когда она завершает работу, то возвращает управление вызывающей программе и передает ей результат расчета.
Процедура – это тоже подпрограмма. Ее тоже вызывают, чтобы выполнить какие-то действия, но от нее не требуется возвращать основной программе какие-либо значения.
Формат описания процедуры имеет вид:
procedure имя процедуры (формальные параметры) ;
раздел описаний процедуры
begin
исполняемая часть процедуры
end;
Формат описания функции:
function имя функции (формальные параметры): тип результата;
раздел описаний функции
begin
исполняемая часть функции
end;
Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.
var x,y,m,n: integer;
procedure MaxNumber(a,b: integer; var max: integer);
begin
if a>b then max:=a else max:=b;
end;
begin
write('Введите x,y ');
readln(x,y);
MaxNumber(x,y,m);
MaxNumber(2,x+y,n);
writeln('m=',m,'n=',n);
end.
Аналогичную задачу, но уже с использованием функций, можно решить так:
var x,y,m,n: integer;
function MaxNumber(a,b: integer): integer;
var max: integer;
begin
if a>b then max:=a else max:=b;
MaxNumber := max;
end;
begin
write('Введите x,y ');
readln(x,y);
m := MaxNumber(x,y);
n := MaxNumber(2,x+y);
writeln('m=',m,'n=',n);
end.
Грубо говоря процедура это функция не возвращающая значения. Поэтому сможете.
Забавный ответ у ivantrs. Немножко его скорректировав, можно написать:
"Процедура что-то делает и ничего не возвращает...
а функция ничего не делает и что-то возвращает. ":)
На самом деле фукнция напоминает собой вычисление некоего математического выражения в математике. Когда в математике вы вычисляете какое-то выражение, то вы получаете конкретное число - результат вычисления. Также и функция на Паскале: она возвращает некоторое значение заданного вами типа после выполнения предложений, записанных в ее теле.
Посмотрите сходства между функцией в математике и с вызовом функции на Паскале:
в математике y = sin( x )
на Паскале y = sin( x )
Как видите, полное сходство! То есть фукнцмя на Паскале возвращает некоторое значение. Другое дело, чтобы получить это значение, вы должны в теле функции иметь некоторые операторы языка Паскаля, которые в соответсвтии с алгоритмом будут вычислять нужное значение.
То есть вызов функции на Паскале вы можете вставлять в любое выражение, так как результатом работы функции будет некоторое значение.
Процедуры не возвращают значение.
Главная разница между ними также состоит в том, что если я не ошибаюсь, параметры в фукнцию при вызове передаются по значениею. Это значит, что в функцию передаются копии заданных вами аргументов при вызове.
А параметры в процедуру передаются по ссылке. Это значит, что если в процедуре вы меняете значение параметра, то тем самым вы меняете исходное значение в программе.
Есть очень полезная программа - называется pascal pro, бесплатная программка, решает любые задачи ПАСКАЛЬ. Вводишь условие задачи и он начинает решать за кротчайшее время. Очень удобная программа - русская. В комплекте с программой имеются 5МЛН Типов по решению задач (уже встроены в программу) , вам остается только включить его, ввести что вам дано и ждать около 10 минут! Если задача не совпала он начинает искать подобную ей. Мне кажется ей просто цены нет!
Всю информацию смотрите здесь:
интересный ответ у Сыроежка Оракул (79431)
В чем разница между процедурным программирование и объектно-ориентированным?
Процедурное программирование подразумевает возможность создания в
рамках программы локальных
подробнее...
Чем отличаются READLN и READKEY в Паскале?
Во-первых, ReadLn() процедура, а ReadKey - функция. А во-вторых, процедура осуществляет чтение в
подробнее...
ПАСКАЛЬ и ГРАФИКА
Подпрограммы для работы с пером
Рисование линий осуществляется текущим пером. Доступ к
подробнее...
Delphi и OpenGL
нинаю че там у тя медленно отрисовывается, у мну при использовании аппаратного ускорения (т. е.
подробнее...
что такое процедуры Турбо Паскаля
Чет сегодня засилье вопрососв про паскаль... .
Если в программе возникает необходимость частого
подробнее...
По значению агрегат и аппарат это одно и то же ?
Агрега́т — совокупность механизмов. Выполняет одно определённое действие. Хотя иногда
подробнее...
что такое пиксельные шейдеры и зачем они вообще нужны
Ше́йдер (англ. Shader) — это программа для одной из ступеней графического конвейера,
подробнее...
паскаль. Почему в некоторых местах мы ставим бегин и энд,а некоторых нет
Бегин/Енд заключают в себя составной оператор.
Составной оператор - это набор команд, в
подробнее...
Помогите по Visyal Basic Script (VBS)! Как сделать какое-то значение к которому при определенной команде можно бы вернут
Давно доказано, что без GoTo можно прекрасно обходиться.
Просто надо правильно строить
подробнее...
Модульное программирование. что это такое? подскажите пожалуйста!
Если взять сегодняшнюю Java, то можно (как и в большинстве случаев)
увидеть частичный возврат
подробнее...
строки в Паскале
Доброго времени суток.
Вот теперь видно, что пытались сделать. Можно делать и так.
подробнее...
Что такое объектно-ориентированное программирование?
Объектно-ориентированное программирование представляет собой метод программирования, который весьма
подробнее...