Показать сообщение отдельно
Старый 28.03.2014, 10:01   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от "Программист" Посмотреть сообщение
Чем процедура отличается от функции? что лучше?
Цитата:
Сообщение от "Программист" Посмотреть сообщение
Я прочитал но такое ощущение как будто это одно и то же
Как говорится, "похоже, да не то же".
Попробую показать наглядно.
Код:
Var
 T,x1,x2:Real;
 n:byte;
 ...
Function QQQ(z1,z2:real; m:byte):Real;
begin
 ...
end;

Begin
 T:=QQQ(x1,x2,n);
End.
В данной "программе" описана функция QQQ от трёх переменных: двух вещественных и одной целой. Значением функции является вещественная величина (одна!) QQQ, с которой следует обращаться также, как и со стандартными функциями:
Код:
Y1:=Sin(0.74);
Y2:=QQQ(x1,0.25,7);
Теперь рассмотрим процедуру:
Код:
Var
 T,x1,x2:Real;
 n:byte;
 D:boolean;
 S:String;
 ...
Procedure QQQ(z1,z2:real; m:byte; var b:boolean; var R:String);
begin
 ...
end;

Begin
  QQQ(x1,x2,n,D,S);
End.
Отличия от функции:
1. На выходе процедуры могут формироваться не одна, а сразу несколько переменных, причем разных типов. При описании процедуры в перечне ее параметров входные задаются так же, как и в функции, а выходным предшествует служебное слово "var". С массивами, правда, сложнее, но этого пока трогать не будем.
2. Имя процедуры НЕ является, в отличие от функции, идентификатором переменной. При обращении к процедуре из тела программы ее имя есть команда вызова.

Сейчас сделаю вариант программы с процедурой, как Вы просите. Надеюсь, станет понятнее.

P.S. Вопрос "что лучше?" не просто бессмысленный, а АБСОЛЮТНО бессмысленный. Лучше то, что больше подходит к конкретной ситуации. Единственно - если подпрограмма вычисляет одну-единственную переменную, то целесообразнее использовать функцию. Просто удобнее.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070