Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> почему пропали изменения? 
:(
    Опции темы
Guest
Дата 28.9.2005, 10:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











в функцию передается массив, в ней изменяются некоторые элементы массива, после выхода из функции изменения пропадают, почему?

как грамотно в описанной ситуации передавать переменные в функцию?

что означает var при передаче параметром (function f(var i : integer)) ?
  Вверх
Albinos_x
Дата 28.9.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



код в студию...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Guest
Дата 28.9.2005, 10:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











спасибо разобрался, как раз var и нужен был
  Вверх
Payne
Дата 28.9.2005, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Детектив
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 6.4.2005
Где: Петербург

Репутация: 4
Всего: 10



var означает, что переменная будет использоваться в функции (и больше нигде). Например:

Код

function summa (var a,b: integer): integer;
begin
  result := a+b;
end;

В данной функции два параметра - a и b. Ты можешь передать в функцию любые значения или переменные типа integer, а в самом теле функции они будут считаться a и b. К примеру, если ты пишешь summa (2, 3), то a будет равно 2, b будет равно 3. Можно также записать summa (var1, var2, ...). При этом те значения, которые ты передал в функцию, никак не меняются. Поэтому и изменения с массивом после выхода из функции "пропадают".
В вышеприведенном коде result := ... означает, что функция возвращает то, что написано в правой части оператора. Тип возвращаемого значения определен в заголовке функции: function summa (параметры): тип. Т.е. в твоем случае нужно после операций с массивом записать, к примеру, такую строку:
Код

result := arr; //это тот массив, который получился после операций с его элементами


причем сама функция должна возвращать массив. Допустим, имя функции ar_operations. Имя переменной-массива - arr_var. Тогда вызываешь функцию так: arr_var := ar_operations (arr_var);
В этом случае массив передается в функцию, она производит над ним операции и возвращает какой-то результат в виде массива. Его ты и присваиваешь переменной arr_var, с которой работаешь.

Это сообщение отредактировал(а) p0s0l - 28.9.2005, 14:59
PM MAIL WWW ICQ Skype   Вверх
Петрович
Дата 28.9.2005, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата(Payne @ 28.9.2005, 11:50)
var означает, что переменная будет использоваться в функции (и больше нигде). Например:

Блин. А ты вообще знаешь то о чем пишеш-то?
Да будет тебе известно, модификатор var действует с точностью до наоборот.
Почитай что-нибудь по основам языка Pascal/Delphi. А уж потом, давай ответы.
Прости за грубость. smile



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Guest
Дата 28.9.2005, 11:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











так изменения пропали
Код

procedure myProc(arMy : TarMy);

а так изменения сохранились
Код

procedure myProc(var arMy : TarMy);


есть ощущение что сущность var вами раскрыта не полностью

конечно можно заменить
Код
procedure
 на 
function

 и 

myProc(arMy);
 на 
arMy := myProc(arMy);

но зачаем лес та городить?

  Вверх
Payne
Дата 28.9.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Детектив
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 6.4.2005
Где: Петербург

Репутация: 4
Всего: 10



Цитата
Почитай что-нибудь по основам языка Pascal/Delphi

Да знаю я основы Pascal/Delphi, иначе не заработал бы репу +11 (т.е. уже +10 smile). Просто неправильно выразил мысль, вот и все.

Цитата(Guest @ 28.9.2005, 10:05)
но зачаем лес та городить?

Подожди, если я правильно понял, то в первом твоем посте говорится про функцию. Вот про функцию я тебе и написал... А тут вдруг ты меняешь функцию на процедуру, и говоришь мне "зачем лес городить". Нехорошо получается.
PM MAIL WWW ICQ Skype   Вверх
Guest
Дата 28.9.2005, 12:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Payne @ 28.9.2005, 11:41)
Цитата(Guest @ 28.9.2005, )
но зачаем лес та городить?

Подожди, если я правильно понял, то в первом твоем посте говорится про функцию. Вот про функцию я тебе и написал... А тут вдруг ты меняешь функцию на процедуру, и говоришь мне "зачем лес городить". Нехорошо получается.

в данном случае на мой взгляд более важен способ передачи данных, а именно
Код

myProc(arMy);
 и 
arMy := myProc(arMy);

от того что procedure была заменена на function в рассматриваемом вопросе мало что поменялось, так тоже работает:
Код

function myProc(var arMy : TarMy);
...
myProc(arMy);

изменения сохранены
так что я несовсем понял суть претензии
  Вверх
Петрович
Дата 28.9.2005, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата(Payne @ 28.9.2005, 12:41)
Просто неправильно выразил мысль, вот и все.

Ну да.
Тогда если вдруг меня спросят что означает слово "True", я отвечу что это означает "лож". Это можно будет считать что я неправильно выразил свою мысль. smile

Цитата(Payne @ 28.9.2005, 12:41)
Подожди, если я правильно понял, то в первом твоем посте говорится про функцию.

А тут, я думаю просто элементарная непонятка. Очень часто, термин "функция" используют для обозначения не только "function", но "procedure". Просто, имеется ввиду нечто, реализующее некоторую функциональность.
Более того, во многих языках программирования, понятия процедуры вообще отсутствует. Там есть только функции.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Girder
Дата 4.10.2005, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155





--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.