Функция с двумя результами

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Функция с двумя результами

Сообщение qivi » 09.10.2011 14:05:27

Можно ли сделать и если да то как функцию возвращающую два (или более) результа?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Функция с двумя результами

Сообщение serg_iv » 09.10.2011 15:05:49

Насколько помню, организовывали когда то через адресный тип такую штуку.
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Re: Функция с двумя результами

Сообщение BugMaker » 09.10.2011 16:11:11

Не тестировал, но как-то так все должно работать
Код: Выделить всё
program varparams;

Procedure test(input:integer; var output1, output2:integer);
begin
  output1:=input+6;
  output2:=input*2;
end;

var i,o1,o2:integer;
begin
  i:=7;
  test(i,o1,o2);
  writeln(o1);
  writeln(o2);
end.
BugMaker
новенький
 
Сообщения: 10
Зарегистрирован: 23.07.2011 22:26:56

Re: Функция с двумя результами

Сообщение .wOvAN » 09.10.2011 17:39:20

Код: Выделить всё
Type TDoubleResult=record
           Res1:Integer;
           Res2:Integer;
          End;
////
Function MagicResult(aBracadabra:Integer):TDoubleResult;
begin
  Result.Res1:=1;
  Result.Res2:=2;
end;
////
with MagicResult(1) do
if ((Res1 = 1) and (Res2=2)) then BlaBlaBla;
.wOvAN
постоялец
 
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12

Re: Функция с двумя результами

Сообщение qivi » 10.10.2011 15:48:35

Спасибо за ответы, помогло.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Функция с двумя результами

Сообщение qivi » 14.11.2011 16:39:50

В продолжение темы, функция не может возвращать динамический массив?
Пробую объявить:
Код: Выделить всё
function PYATNO(CenterPyatna:UTF8String):array of UTF8String;

Ошибка:
Код: Выделить всё
f15_prostranstvo.pas(124,48) Error: Type identifier expected
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Функция с двумя результами

Сообщение Mr.Smart » 14.11.2011 16:41:32

Код: Выделить всё
type
  TArr = array of String;

function PYATNO(CenterPyatna:UTF8String): TArr;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Функция с двумя результами

Сообщение qivi » 14.11.2011 16:44:06

Что такое : TArr;? Динамический? Тип строки?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Функция с двумя результами

Сообщение Mr.Smart » 14.11.2011 16:49:06

А разве не видно? :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Функция с двумя результами

Сообщение qivi » 14.11.2011 16:54:42

Mr.Smart писал(а):А разве не видно? :wink:

Да пардон...

А как потом считывать этот массив, это будет работать:
Код: Выделить всё
NovoePyatnoZagruzki:=Copy(PYATNO(IDCenterZagruzki),0, High(PYATNO(IDCenterZagruzki)));


Да и правильно я понимаю что эта строка (выше) дважды вызовит функцию PYATNO? Можно это как то оптимизировать?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Функция с двумя результами

Сообщение Mr.Smart » 14.11.2011 17:13:58

Можно
Код: Выделить всё
var
  tmp: TArr
begin
  tmp:=PYATNO(IDCenterZagruzki);
...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Функция с двумя результами

Сообщение qivi » 14.11.2011 17:30:38

Mr.Smart спасибо.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Функция с двумя результами

Сообщение Mr.Smart » 14.11.2011 17:35:27

qivi писал(а):А как потом считывать этот массив, это будет работать

Странный у вас код считывания :shock:
Код: Выделить всё
var
  tmp: TArr;
  j: Integer;
begin
....
  for j:=Low(tmp) to High(tmp) do
    tratata:=tmp[j];
....
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Функция с двумя результами

Сообщение qivi » 14.11.2011 17:40:46

А стоит ли крутить цикл, если массив можно просто скопировать?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

Рейтинг@Mail.ru