Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2016.04.24;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.002 c
2-1411245669
Stepan4ik
2014-09-21 00:41
2016.04.24
Function 2 значения


2-1411410140
Viktor
2014-09-22 22:22
2016.04.24
RS-232 Помогите!


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


2-1412352887
Желание
2014-10-03 20:14
2016.04.24
Имя метода procedure of object


2-1411564536
Who_are_you?
2014-09-24 17:15
2016.04.24
делфи 7 а делфи 5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский