IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Функция, которая не является функцией
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 98
Пол: Мужской
Реальное имя: Andriy

Репутация: -  0  +


Рассмотрим такую функцию:

function Ax(var b:integer):integer;
begin
b:=1;
Ax:=1
end;


А теперь отвлечемся от Паскаля (условно wink.gif ).

С общей точки зрения кусок кода в примере - функция, процедура или функционально-процедурный мутант? rolleyes.gif

Спасибо за аргументированные ответы wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


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


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 98
Пол: Мужской
Реальное имя: Andriy

Репутация: -  0  +


Archon, спасибо за ответ, тогда слова предподавателя о том, что функция возвращает одно значение, а процедура много, неверны?

Еще раз отмечу, что речь идет об основных понятиях программирования, не привязанных к конкретному языку wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
слова предподавателя о том, что функция возвращает одно значение, а процедура много, неверны?
Не в этом отличие процедуры от функции... А в том, что возвращаемое функцией значение можно использовать непосредственно в выражении. С процедурой такое не пройдет...

P.S. То, что ты привел - это функция с побочным эффектом, кстати...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


В общем случае неверны. По идее процедура вообще не возвращает значения. Она может это делать только опосредованно: для Паскаля через var-параметры, например. Функция это тоже может делать. За подробностями сюда: Wikipedia: Функция (программирование)


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 98
Пол: Мужской
Реальное имя: Andriy

Репутация: -  0  +


Цитата
Не в этом отличие процедуры от функции... А в том, что возвращаемое функцией значение можно использовать непосредственно в выражении. С процедурой такое не пройдет...

Понятно, так и отвечал предподавателю, он сказал, что это неверно и выдвинул свою версию. Я ему показал функцию, как в примере, на что он ничего внятного не ответил, сославшись на спешку.

Поэтому и решил уточнить, все ли функции в Паскале есть функциями smile.gif

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

Спасибо за ответ, который расставил все точки над ''i'' окончательно wink.gif

Archon, спасибо за ссылку; видно, предподаватель ошибся, хотя, возможно, хоте все пояснить понятно.

Сообщение отредактировано: Vinchkovsky -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 98
Пол: Мужской
Реальное имя: Andriy

Репутация: -  0  +


Читаю в книге:

Цитата
Если алгорит выдает одно значение ... то такой алгоритм может быть алгоритмом-функцией, если выдает много значений ... алгоритмом-процедурой


В.Шелест, "Программирование", "БХВ-Петербург", 2002

Как с этим быть?

Если утверджение верно, то в Паскале процедура выдает значение через var-параметры. Но тогда и функция может возвращать сколько угодно значений через var-параметры?

Единственное логичное объяснение вижу в различии понятий "выдает" и "возвращает", хотя это звучит несколько бредово и предподаватель оперировал вторым понятием unsure.gif .
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
Если алгорит выдает одно значение ... то такой алгоритм может быть алгоритмом-функцией, если выдает много значений ... алгоритмом-процедурой
Перефразируем: Если алгоритм выдает одно значение, он может быть реализован функцией. Если выдает много значений, то функцией (в чистом виде, без side-effects) он быть не может... И вот тогда уже он может быть реализован либо функцией, либо процедурой. Так понятнее?

Цитата
Но тогда и функция может возвращать сколько угодно значений через var-параметры?
Может. В качестве побочного эффекта, повторяю. Но не должна. А одно - должна вернуть...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 98
Пол: Мужской
Реальное имя: Andriy

Репутация: -  0  +


Спасибо за помощь, писал сообщение в спешке, хорошо не подумал, уже в дороге вспомнил о побочном эффекте.
Немного запутала фраза с Википедии:

Цитата
Особенность, отличающая ее от процедур, состоит в том, что функция возвращает значение, ... .

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

Спасибо за помощь (на практике все понимаю, в теории же хотелось разобраться).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Vinchkovsky @ 4.11.2008 18:08) *
на практике все понимаю, в теории же хотелось разобраться).

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.10.2020 11:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name