Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.04.24;
Скачать: CL | DM;

Вниз

Function 2 значения   Найти похожие ветки 

 
Stepan4ik   (2014-09-21 00:41) [0]

Как вернуть 2 значения с функции ?
1-ое Result, а 2-е ?
И можно пример, пжл )


 
junglecat   (2014-09-21 00:43) [1]

> а 2-е ?

Result2
Шутка.
Заведи record с 2 полями и возвращай


 
Stepan4ik   (2014-09-21 00:44) [2]

Я не понимаю что вы написали. Можете пример кинуть ?)


 
Inovet ©   (2014-09-21 00:47) [3]

Также смотри модификатор Var. Ещё указатели есть. Смотря что удобнее из 3-х.


 
Ega23 ©   (2014-09-21 00:53) [4]

1. procedure Bar(var Prarm1: Type1; var Param2: Type2; .....);

2.
 type
    TFoo = record
      Field1: Type1;
      Field2: Type2;
      ........
    end;
function Bar: TFoo;

3.
function Bar: Pointer;


 
Stepan4ik   (2014-09-21 01:26) [5]

Function GetSum(a, b : Integer) : Integer;
var
sum,raz:integer;
begin
 sum:=a+b;
 raz:=a-b;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
GetSum (3,3);
end;

Вот крч что мне надо. Я хз как получить и sum и raz.


 
Ega23 ©   (2014-09-21 01:40) [6]


> Вот крч что мне надо. Я хз как получить и sum и raz.


Вариант 2.


 
Stepan4ik   (2014-09-21 01:51) [7]

function TForm1.GetSum(a, b : Integer) : Integer;
begin
 Result.sum:=a+b;
Result.raz:=a-b;
end;


Ошибка лезет :

[DCC Error] Unit1.pas(36): E2018 Record, object or class type required
[DCC Error] Unit1.pas(37): E2018 Record, object or class type required


 
Stepan4ik   (2014-09-21 02:02) [8]

Всё. Догнал.
А как функцию теперь вызватьи  получить значения ?
При обычном вызове он бьёт ошибку. Мол тип MyResult...



   type
 MyResult = record
   sum:integer;
   raz:integer;
   end;

function GetSum(a, b : Integer) : MyResult;
begin
 Result.sum:=a+b;
 Result.raz:=a-b;
end;


 
Stepan4ik   (2014-09-21 02:03) [9]

Всё. Догнал.
А как функцию теперь вызватьи  получить значения ?
При обычном вызове он бьёт ошибку. Мол тип MyResult...



   type
 MyResult = record
   sum:integer;
   raz:integer;
   end;

function GetSum(a, b : Integer) : MyResult;
begin
 Result.sum:=a+b;
 Result.raz:=a-b;
end;


 
Stepan4ik   (2014-09-21 02:47) [10]

?


 
Rouse__   (2014-09-21 03:01) [11]

Делай переменную типа записи MyResult и ей присваивай результат вызова функции.
(Пфф... типа ей мы типо присвоим типо результат - сорри, чейто понесло :))


 
Германн ©   (2014-09-21 03:24) [12]


> сорри, чейто понесло :))
>

Ну да. Конечно. Суперпупер проекты вы клепаете без проблем. А основы паскаля/Дельфи  почти забыли.


 
Плохиш ©   (2014-09-21 11:39) [13]


> Stepan4ik   (21.09.14 02:03) [9]
> Всё. Догнал.
> А как функцию теперь вызватьи  получить значения ?
> При обычном вызове он бьёт ошибку. Мол тип MyResult...
>

В ошибке, которую бьют, разве не написано, что надо поменять прокладку?


 
Pavia ©   (2014-09-21 18:31) [14]

function SumSub(a,b:Integer; var Sum:Integer; var Sub:Integer):Boolean;
begin
Result:=True;
Sub:=a-b;
Sum:=a+b;
Result:=((not (a xor b) and (a xor Sum)) shr 31) <>0;
end;


 
имя   (2014-09-22 07:30) [15]

Удалено модератором


 
antonn ©   (2014-09-23 16:50) [16]


> Stepan4ik   (21.09.14 02:03) [9]
>
> Всё. Догнал.
> А как функцию теперь вызватьи  получить значения ?
> При обычном вызове он бьёт ошибку. Мол тип MyResult...

ну тогда есть уже Tpoint на 2 значения и TRecord на 4 значения =)


 
brother ©   (2014-09-23 18:01) [17]

> При обычном вызове он бьёт ошибку. Мол тип MyResult...

чего именно в ошибке Вы не поняли?


 
Керк   (2014-09-25 16:41) [18]

Формально MyResult - это не два значения, а одно :)


 
имя   (2014-09-25 16:52) [19]

Удалено модератором


 
Дмитрий   (2014-09-26 16:12) [20]

еще можно возвращать массив


 
DQ   (2014-09-30 14:54) [21]

> Как вернуть 2 значения с функции ?

Никак. Возврат функции есть значение в регистре EAX.
Можно вернуть указатель. Можно менять значения переменных внутри функции переданные туды по указателям. Но вернуть можно только одно значение.


 
brother ©   (2014-09-30 14:56) [22]

> Но вернуть можно только одно значение.

возвращаем word интерпетируем как 2 byte :)


 
junglecat ©   (2014-09-30 15:09) [23]

> Возврат функции есть значение в регистре EAX

это если влезает. double возвращается через ST0 в стеке fpu, что не влезло - через скрытые var-параметры


 
DQ   (2014-09-30 15:32) [24]

> возвращаем word

Ну и?) Возвращаем одно Word :)
А уже что с ним дальше это отдельная история.

> double возвращается через ST0 в стеке fpu

мда? Разве не по указателю? Думал в ST0 возвращаются только при работе с функциями FPU. Ну может быть, спасибо за просвещение. С:

Кстати не вбивайте double в Яндекс.... о___0


 
brother ©   (2014-09-30 16:21) [25]

я про инерпретацию...


 
junglecat ©   (2014-09-30 16:38) [26]

> не вбивайте double в Яндекс

а что там такого страшного?


 
Inovet ©   (2014-09-30 20:12) [27]

> [21] DQ   (30.09.14 14:54)
> Возврат функции есть значение в регистре EAX

Какая разница где оно там возвращается, это не влияет на язык.



Страницы: 1 вся ветка

Текущий архив: 2016.04.24;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.007 c
2-1411410140
Viktor
2014-09-22 22:22
2016.04.24
RS-232 Помогите!


15-1439457626
NailMan
2015-08-13 12:20
2016.04.24
Помогите с написанием функции для ардуинки


15-1438863349
Кто б сомневался
2015-08-06 15:15
2016.04.24
Win10 EULA - новые проблемы от новой ОСи


4-1276949542
lexi
2010-06-19 16:12
2016.04.24
Проверить существование родительского процесса


15-1439456322
olle
2015-08-13 11:58
2016.04.24
Штрих-М Повторная печать чека