Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.08.2011, 12:25   #21
DenNik2006
Пользователь
 
Аватар для DenNik2006
 
Регистрация: 27.07.2011
Сообщений: 71
По умолчанию

вот такой вопрос: чем отличается реализация эта
Цитата:
Сообщение от ZuBy Посмотреть сообщение
Код:
procedure MyProcedure(const a, b: byte; out c: byte);
begin
  c := a+b;
end;
от этой
Код:
procedure MyProcedure(const a, b: byte; var c: byte);
begin
  c := a+b;
end;
Техника несовершенна: компьютеру, чтобы прийти в себя, нужно три пальца, человеку - всего два!
DenNik2006 вне форума
Старый 22.08.2011, 12:30   #22
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от DenNik2006 Посмотреть сообщение
вот такой вопрос: чем отличается реализация эта


от этой
Код:
procedure MyProcedure(const a, b: byte; var c: byte);
begin
  c := a+b;
end;
Если я не ошибаюсь, при var можно передавать переменную для обработки подпрограммой и возможностью её изменения, а out - только выведения резлультата. Хотя я как-то по привычки использую var, но лучше разбивать код на более мелкие части, чтобы код был прост и понятен
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума
Старый 22.08.2011, 12:40   #23
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

DenNik2006, в данном примере разницы нет.
а вообще out автоматически очищается при входе в процедуру, это удобно например при получении из процедуры данных записи (record)
ZuBy вне форума
Старый 22.08.2011, 12:42   #24
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
смотрим на вопрос несколько шире,
Согласен. Накидали разнообразия )
I'm learning to live...
Stilet вне форума
Старый 22.08.2011, 12:43   #25
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
DenNik2006, в данном примере разницы нет.
а вообще out автоматически очищается при входе в процедуру, это удобно например при получении из процедуры данных записи (record)
Врядли она очищается, а если и да, то заполняется 0 и все.
На счет разницы, возможно есть небольшое преимущество в производительности, ведь не нужно передавать лишний параметр, всего лишь выделить для него память
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума
Старый 22.08.2011, 12:47   #26
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от chertovich Посмотреть сообщение
Врядли она очищается, а если и да, то заполняется 0 и все.
ну ведь очищается, я же не говорил что она уничтожается
это аналогично FillChar
ZuBy вне форума
Старый 22.08.2011, 13:13   #27
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

И какой идиот считает, что процедура возвращает значение через ВАР?

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

http://en.wikipedia.org/wiki/Side_ef...mputer_science)
p51x вне форума
Старый 22.08.2011, 16:37   #28
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
И какой идиот считает, что процедура возвращает значение через ВАР?

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

http://en.wikipedia.org/wiki/Side_ef...mputer_science)
1. Не стоит никого оскорблять)
2. Изучай делфи: http://www.snkey.net/books/delphi/ch1-6.html
Цитата:

Использование параметров

Параметры в процедурах и функциях могут применяться не только по своему прямому предназначению - для передачи данных подпрограмме, но так же могут быть использованы для возвращения значений. Подобное их использование может быть вызвано, например, необходимостью получить более одного значения на выходе функции. Синтаксис объявления параметров в таком случае несколько отличается от стандартного - перед именем параметра следует использовать ключевое слово var:
procedure Circle (square: real; var radius, length: real);

Данная процедура принимает "на обработку" одно значение - площадь (square), а возвращает через свои параметры два - радиус (radius) и длину окружности (length). Практическая ее реализация может выглядеть таким образом:
procedure Circle (square: real; var radius, length: real);
begin
radius := sqrt(square / pi); // функция pi возвращает значение числа ?
length := pi * radius * 2;
end;

Теперь, чтобы воспользоваться этой функцией, следует объявить в программе 2 переменные, которые будут переданы в качестве аргументов этой процедуре и получат результаты. Их имена не важны, важно лишь, чтобы они были такого же, или совместимого типа, т.е. вещественные, например:
var r,l: real;
...
Circle(100,r,l);

После вызова функции Circle, переменные r и l получат значения радиуса и длины окружности. Остается их вывести при помощи writeln. Исходный код программы приведен в листинге 6.3.

Листинг 6.3. Процедура с параметрами
program params;
{$APPTYPE CONSOLE}
procedure Circle (square: real; var radius, length: real);
begin
//функция sqrt извлекает корень, а функция pi возвращает значение числа ?
radius := sqrt(square / pi);
length := pi * radius * 2;
end;
var
r,l: real;
begin
Circle(100,r,l);
writeln(r);
writeln(l);
readln;
end.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось Stilet; 22.08.2011 в 17:31.
chertovich вне форума
Старый 22.08.2011, 17:23   #29
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Спасибо всем!
hon вне форума
Старый 22.08.2011, 17:35   #30
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от hon Посмотреть сообщение
Спасибо всем!
тонкий намек, тема Закрыта)
ZuBy вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать так,чтобы он левой рукой до стены коснулся? и если можно чтобы двери лифта закрылись maxon56 Паскаль, Turbo Pascal, PascalABC.NET 0 07.06.2011 18:46
Как записать, чтобы ячейка выдавала то же число, что введено в другой? abdumanon Microsoft Office Excel 6 09.04.2009 16:05
Как сделать так,чтобы при нажатии на кнопку выполнялась процедура? Bolgarin Общие вопросы Delphi 10 03.06.2008 23:48
Число N, заменить одну из его цифр, чтобы получилось число, max близкое к некоторой степени двойки urgu_st Помощь студентам 13 23.10.2007 09:14
что нужно сделать, чтобы при нажатии кнопки запускалась процедура mager Общие вопросы Delphi 15 19.11.2006 15:02