![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 16.03.2007
Сообщений: 48
|
![]()
Всем Привет! Хочется уточнить касательно Pascal, в чем всетаки разница между процедурами и функциями, знаю что функция возвращает значение, процедура нет, хотя некоторые мне говорят что как таковых отличий между ними не существует. Читал в разной литературе, но до меня не доходят именно главы про процедуры и функции, про формальные и фактические параметры и т.д.
Подскажите если не трудно я ведь только учусь и хочу разобраться. P.S. может покажите простенький пример одной и той же задачи сначала с использованием процедуры, а потом с использованием функции, чтобы посмотреть различия. Заранее огромное Спасибо! |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Попробую обьяснить: Разница между процедурами и функами именно в том что функа может возвращать результ а процедура нет, чтобы получать из процедуры какой либо результ можно в нее подставить параметр-переменную : var i:integer Разница между параметром-переменной и параметром-константой (s:string
![]() С другой стороны параметр-константа (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...
|
![]() |
![]() |
![]() |
#3 |
With best regards
Участник клуба
Регистрация: 20.04.2007
Сообщений: 1,448
|
![]()
Функции - это процедуры особого характера, результатом работы которых является некоторое значение, подобное переменной.
Функция, как и процедура, может иметь список параметров, следующих за именем функции в круглых скобках. Но если имя процедуры используется только для ее вызова, то с именем функции связывается ее значение. На примере сложения двух целых чисел проиллюстрируем возможности Турбо Паскаля 7.0 по оформлению программ при помощи процедур и функций, а также рассмотрим различия между этими двумя подходами. Код:
Функция же имеет только два параметра. Это связано с тем, что само имя функции представляет собой идентификатор параметра, значение которого после окончания работы функции равно результату вычисления. Этот параметр соответствует параметру-переменной Sum процедуры. При объявлении функции ей в соответствие ставят определенный тип данных - тип возвращаемого функцией значения. Объявление функции Код:
Процедуры и функции в Турбо Паскале отличаются не только описанием, но и способом их вызова. Так вызов функции Sum можно произвести в следующей форме Код:
Последнее отличие процедур от функций заключается в необходимости присваивания результата вычисления в теле функции переменной, имя которой совпадает с именем функции. Если такое присваивание в теле функции не выполнено, то функция не возвратит никакого результата (точнее возвратит произвольный результат). Итак, из вышесказанного возьмите на заметку следующее. Оформлять подпрограмму как функцию целесообразно только в том случае, если ожидается результат работы подпрограммы. Если же последовательность команд ориентирована на выполнение некоторого действия (выдача информации на экран и т.п.), целесообразно оформлять ее как процедуру. Источник.
Life is too short, play more...
Как правильно задавать вопросы |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 16.03.2007
Сообщений: 48
|
![]()
Ребята Спасибо большое за помощь, надеюсь через год усиленных занятий я с вами буду разговаривать на совсем другом языке, и может мне будет смешно от того как я этого не мог понять.
![]() |
![]() |
![]() |
![]() |
#5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Ниче смешново нет, я сам себя таким помню, и ничуть не смущаюсь.
I'm learning to live...
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 25.09.2007
Сообщений: 66
|
![]()
Люди, я сейчас не дома, поэтому в хелпе посмотреть не могу, но если память мне не изменяет, то помойму можно сделать так:
procedure q(s:string; var i:integer): string; Или память мне изменяет? |
![]() |
![]() |
![]() |
#7 | |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#8 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#9 | |
With best regards
Участник клуба
Регистрация: 20.04.2007
Сообщений: 1,448
|
![]() Цитата:
Если написать так: function q(s:string; var i:integer): string; то это становится похожим на правду.
Life is too short, play more...
Как правильно задавать вопросы |
|
![]() |
![]() |
![]() |
#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 |