Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 22.02.2012, 21:29   #1
gufon
Форумчанин
 
Регистрация: 21.12.2010
Сообщений: 224
По умолчанию Delphi функция которая возвращает 2 значения

Помогите, у меня функция заходит на сайт и считывает 2 значения, но мне их нужно получить отдельно, для этого нужно чтобы функция вернула два значения отдельно, и я записал их в таблицу. А если запускать функцию два раза то это намного дольше, каждую страницу будет грузить два раза
gufon вне форума Ответить с цитированием
Старый 22.02.2012, 21:33   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

используйте структуры/классы/var-параметры/etc
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.02.2012, 22:04   #3
gufon
Форумчанин
 
Регистрация: 21.12.2010
Сообщений: 224
По умолчанию

Можно по подробней?
gufon вне форума Ответить с цитированием
Старый 22.02.2012, 22:18   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

я бы предпочел передачу через var-параметры.

сама процедура, которая должна вернуть два значения
Код:
procedure DoIt(var p1,p2:integer);
begin
 p1:=1;
 p2:=2;
end;
и код её применения(на кнопке например)
точнее это просто наглядный пример работы.
Код:
var v1,v2:integer;
begin
 v1:=Random(555);
 v2:=Random(555);
 ShowMessage(Format("%d+%d=%d",[v1,v2,v1+v2]));
 DoIt(v1,v2);
 ShowMessage(Format("%d+%d=%d",[v1,v2,v1+v2]));
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.02.2012, 22:21   #5
gufon
Форумчанин
 
Регистрация: 21.12.2010
Сообщений: 224
По умолчанию

v1 и v2 будут равнятся 1 и 2?? Или я что то не допонял, просто в delphi я не особо много чего понимаю
gufon вне форума Ответить с цитированием
Старый 22.02.2012, 22:23   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

да.

но все-таки запустите код, я же специально написал что это наглядный пример.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.02.2012, 22:08   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
procedure DoIt(var p1,p2:integer);
Замечу, что если параметры чисто выходные, то лучше использовать out вместо var.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 23.02.2012, 22:26   #8
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,517
По умолчанию

Если уж так нужно получить два значения именно за один проход может есть резон вернуть значение, как строку с разделителями?
Код:
function DoIt(p1, p2: integer): string;
begin
  result := inttostr(p1) + '|' + inttostr(p2);
end;
Потом разбить строку большого труда не составит. ... это я так... рассуждаю вслух
_SERGEYX_ вне форума Ответить с цитированием
Старый 23.02.2012, 22:28   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Намного лучше использовать запись, чем разделитель.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 23.02.2012, 22:35   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

Цитата:
Замечу, что если параметры чисто выходные, то лучше использовать out вместо var.
согласен..
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция, которая возвращает количество нулевых бит в символах строки. MeTeOpA Общие вопросы C/C++ 7 26.02.2011 07:31
Функция которая возвращает динамический массив gagarin0 Помощь студентам 5 19.01.2011 14:48
Функция не возвращает значения 2.0 Winlook PHP 1 10.05.2010 00:58
функция gcd, которая возвращает наибольший общий делитель двух целых чисел Jereme Общие вопросы C/C++ 2 21.01.2010 02:49
Как создать функцию, которая возвращает результат - строку типа ansistring. atg C++ Builder 2 28.10.2009 19:20


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS