|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.09.2007, 04:41 | #1 |
Пользователь
Регистрация: 16.03.2007
Сообщений: 48
|
Процедуры и функции. В чем отличие?
Всем Привет! Хочется уточнить касательно Pascal, в чем всетаки разница между процедурами и функциями, знаю что функция возвращает значение, процедура нет, хотя некоторые мне говорят что как таковых отличий между ними не существует. Читал в разной литературе, но до меня не доходят именно главы про процедуры и функции, про формальные и фактические параметры и т.д.
Подскажите если не трудно я ведь только учусь и хочу разобраться. P.S. может покажите простенький пример одной и той же задачи сначала с использованием процедуры, а потом с использованием функции, чтобы посмотреть различия. Заранее огромное Спасибо! |
05.09.2007, 08:11 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Попробую обьяснить: Разница между процедурами и функами именно в том что функа может возвращать результ а процедура нет, чтобы получать из процедуры какой либо результ можно в нее подставить параметр-переменную : var i:integer Разница между параметром-переменной и параметром-константой (s:string есть в том что изменения параметр-переменной после окончания работы с процедурой сохраняются в ту переменную которую подставили : q(as,ii); вот в данном случае ii - параметр-переменная, обязательно должна быть обьявленна, и расчеты с этим параметром обязательно возвращаются в эту переменную. т.е. нельзя обьявить q(as,20); ибо procedure q(s:string; var i:integer); где i параметр-переменная т.е. если возле параметра пишется var, это говорит паскалю, что он должен результат расчетов с этой переменной вертуть в нее.
С другой стороны параметр-константа (s:string) может изменятся внутри тела процедуры, но результат изменения по окончанию процедуры никак не влияет на подставленное в этот параметр значение переменной, т.е. ты можеш скольугодно менять значение s внутри, но as (см. пример), которая туда в примере подставляется никак не изменится внутри тела процдуры (в данном примере) procedure q(s:string; var i:integer); begin s:=s+'1'; {Эти расчеты имеют место только внутри процедуры} i:=i+10; {а это уже изменит значение фактической переменной, прибавит к ней 10} end; function j(s:string; var i:integer):string; begin j:=s+'1'; {Это говорит о том что функция должна вернуть s+'1'} i:=i*10; {значение Переменки, которую сюда подставили умножится на 10, и в нее же запомнится} end; var as:string; ii:integer; begin as:='2'; ii:=1; q(as,ii); writeln(as); writeln(ii); writeln; writeln(j(as,ii)); end. Учти если используеш параметр-переменную, то в функцию на место этого параметра нельзя подставить константу или число (или строку, или массив, в зависимости от типа) т.е. в данном случае : q(as,ii); - Верно! q(as,10); - Неверно! Яснышко?
I'm learning to live...
|
05.09.2007, 08:13 | #3 |
With best regards
Участник клуба
Регистрация: 20.04.2007
Сообщений: 1,448
|
Функции - это процедуры особого характера, результатом работы которых является некоторое значение, подобное переменной.
Функция, как и процедура, может иметь список параметров, следующих за именем функции в круглых скобках. Но если имя процедуры используется только для ее вызова, то с именем функции связывается ее значение. На примере сложения двух целых чисел проиллюстрируем возможности Турбо Паскаля 7.0 по оформлению программ при помощи процедур и функций, а также рассмотрим различия между этими двумя подходами. Код:
Функция же имеет только два параметра. Это связано с тем, что само имя функции представляет собой идентификатор параметра, значение которого после окончания работы функции равно результату вычисления. Этот параметр соответствует параметру-переменной Sum процедуры. При объявлении функции ей в соответствие ставят определенный тип данных - тип возвращаемого функцией значения. Объявление функции Код:
Процедуры и функции в Турбо Паскале отличаются не только описанием, но и способом их вызова. Так вызов функции Sum можно произвести в следующей форме Код:
Последнее отличие процедур от функций заключается в необходимости присваивания результата вычисления в теле функции переменной, имя которой совпадает с именем функции. Если такое присваивание в теле функции не выполнено, то функция не возвратит никакого результата (точнее возвратит произвольный результат). Итак, из вышесказанного возьмите на заметку следующее. Оформлять подпрограмму как функцию целесообразно только в том случае, если ожидается результат работы подпрограммы. Если же последовательность команд ориентирована на выполнение некоторого действия (выдача информации на экран и т.п.), целесообразно оформлять ее как процедуру. Источник.
Life is too short, play more...
Как правильно задавать вопросы |
05.09.2007, 09:05 | #4 |
Пользователь
Регистрация: 16.03.2007
Сообщений: 48
|
Ребята Спасибо большое за помощь, надеюсь через год усиленных занятий я с вами буду разговаривать на совсем другом языке, и может мне будет смешно от того как я этого не мог понять.
|
05.09.2007, 09:28 | #5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ниче смешново нет, я сам себя таким помню, и ничуть не смущаюсь.
I'm learning to live...
|
15.10.2007, 17:43 | #6 |
Пользователь
Регистрация: 25.09.2007
Сообщений: 66
|
Люди, я сейчас не дома, поэтому в хелпе посмотреть не могу, но если память мне не изменяет, то помойму можно сделать так:
procedure q(s:string; var i:integer): string; Или память мне изменяет? |
15.10.2007, 17:49 | #7 | |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Цитата:
|
|
15.10.2007, 17:52 | #8 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Код:
|
|
15.10.2007, 17:53 | #9 | |
With best regards
Участник клуба
Регистрация: 20.04.2007
Сообщений: 1,448
|
Цитата:
Если написать так: function q(s:string; var i:integer): string; то это становится похожим на правду.
Life is too short, play more...
Как правильно задавать вопросы |
|
20.10.2010, 11:02 | #10 |
Новичок
Джуниор
Регистрация: 20.10.2010
Сообщений: 1
|
функцый и процедуры
я навичок в паскале и у меня простой вопрос. как прочесть и покозать "table" (не знаю как на русском)
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Процедуры и функции | V25 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 17.11.2008 20:02 |
Процедуры и функции | 11111 | Помощь студентам | 10 | 26.11.2007 15:06 |
DLL + Процедуры(не функции) | LEKA | Общие вопросы Delphi | 1 | 02.05.2007 20:37 |