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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание функции 
:(
    Опции темы
LexaL
Дата 5.5.2011, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите пожалуйста, можно ли создать функцию возвращающую несколько параметров (2 и более)? Если можно, то так это сделать? За примеры, спасибо!
PM MAIL   Вверх
Данкинг
Дата 5.5.2011, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Можно: создавай свой тип и пиши функцию этого типа.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Galus
Дата 5.5.2011, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не пробовал, и под рукой нет установленного Delphi, но возможно так:
Код

type
...
TArr = array of string;
...
function func(Arr1: TArr): TArr;
...
function TForm1.func(Arr1: TArr): TArr;
var
  i: integer;
begin
  for i = 0 to length(Arr1)-1 do Arr1[i] := Arr1[i] + inttostr(i);
  result := Arr1;
end;


Функция вернёт массив данных типа стринг, к каждому элементу которого будет добавлен в конец его порядковый номер.
PM MAIL   Вверх
northener
Дата 5.5.2011, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(LexaL @  5.5.2011,  19:13 Найти цитируемый пост)
Подскажите пожалуйста, можно ли создать функцию возвращающую несколько параметров

Функция параметры не возвращает. Функция возвращает результат.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Snowy
Дата 5.5.2011, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(LexaL @  5.5.2011,  19:13 Найти цитируемый пост)
Подскажите пожалуйста, можно ли создать функцию возвращающую несколько параметров (2 и более)

Нельзя.
Но ты можешь передать переменные, как var параметры, чтобы функция их изменила.
Для переменного числа значений, можно передать функции список или динамический массив, чтобы она добавила туда записи.
PM MAIL   Вверх
bems
Дата 5.5.2011, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Цитата(LexaL @  5.5.2011,  19:13 Найти цитируемый пост)
Подскажите пожалуйста, можно ли создать функцию возвращающую несколько параметров (2 и более)?
out-параметры предназначены как раз для этого



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Akella
Дата 5.5.2011, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



можно использовать record, весьма удобно
PM MAIL   Вверх
LexaL
Дата 5.5.2011, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно что бы возвращала трехмерный массив и три int переменных. Как в этом случае поступить?
PM MAIL   Вверх
Akella
Дата 5.5.2011, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



в record запихай и массив и три переменных
PM MAIL   Вверх
LexaL
Дата 6.5.2011, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите пожалуйста, как правильно вернуть трехмерный массив. Result:= массив [] ?
PM MAIL   Вверх
Frees
Дата 6.5.2011, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



сделать не функцию а класс


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
kuzyara
Дата 7.5.2011, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 1



а вернуть *ссылку не прокатит?
--------------------
подпись
PM MAIL   Вверх
Snowy
Дата 10.5.2011, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Стоит задуматься о проектировании.
Сам подход, когда функция возвращает какие-то сложные структуры или наборы данных - затея вредная для здоровья.
Как для здоровья программы, так и для здоровья разработчика, в случае, если он работает не один...
Если вам нужно получить трёхмерный массив, то создайте его, отдайте функции для заполнения, получите данные, избавьтесь от массива.
Данные должны порождаться и уничтожаться в одном и том же месте.
В пределах функции, класса, модуля. В зависимости от зоны видимости.

Вариант, когда данные порождаются, например в функции, а потом передаются куда-либо, это не есть хорошо.
Из данной ситуации следуют 2 варианта:
1. Данные уничтожаются автоматически, при выходе за границы видимости переменной (например функция вернула указатель, на локальную переменную).  Обычная ошибка, ведущая всего лишь к тому, что программа не работает.
2. Данные уничтожаются непонятно где, а скорее всего вообще нигде. Типичная для новичков утечка памяти.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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