Функция с двумя результами
Модератор: Модераторы
Функция с двумя результами
Можно ли сделать и если да то как функцию возвращающую два (или более) результа?
Насколько помню, организовывали когда то через адресный тип такую штуку.
Не тестировал, но как-то так все должно работать
Код: Выделить всё
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.Код: Выделить всё
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;Спасибо за ответы, помогло.
В продолжение темы, функция не может возвращать динамический массив?
Пробую объявить:
Ошибка:
Пробую объявить:
Код: Выделить всё
function PYATNO(CenterPyatna:UTF8String):array of UTF8String; Ошибка:
Код: Выделить всё
f15_prostranstvo.pas(124,48) Error: Type identifier expectedКод: Выделить всё
type
TArr = array of String;
function PYATNO(CenterPyatna:UTF8String): TArr;
Что такое : TArr;? Динамический? Тип строки?
А разве не видно? 
Mr.Smart писал(а):А разве не видно?
Да пардон...
А как потом считывать этот массив, это будет работать:
Код: Выделить всё
NovoePyatnoZagruzki:=Copy(PYATNO(IDCenterZagruzki),0, High(PYATNO(IDCenterZagruzki)));Да и правильно я понимаю что эта строка (выше) дважды вызовит функцию PYATNO? Можно это как то оптимизировать?
Можно
Код: Выделить всё
var
tmp: TArr
begin
tmp:=PYATNO(IDCenterZagruzki);
...Mr.Smart спасибо.
qivi писал(а):А как потом считывать этот массив, это будет работать
Странный у вас код считывания
Код: Выделить всё
var
tmp: TArr;
j: Integer;
begin
....
for j:=Low(tmp) to High(tmp) do
tratata:=tmp[j];
....
А стоит ли крутить цикл, если массив можно просто скопировать?
