Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.237.221] |
|
Сообщ.
#1
,
|
|
|
На форме кнопка Button и Label1 Label2:
Скрытый текст unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Label1: TLabel; Button1: TButton; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } function d (a, b:integer):integer; public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); var i,i2,a,b:integer; begin a:=5; b:=5; i:=d(a,b); //ссумируем Label1.Caption:=IntToStr(i);//выводим d1 i2:=d(a,b); Label2.Caption:=IntToStr(i2);//выводим d2 end; function TForm2.d(a, b: integer): integer; var d1,d2: integer; begin d1:=a+b*a; //Присваиваем функции сумму переменных 1 Result:=d1; //d2:=a*2+b*a; //Присваиваем функции сумму переменных 2 //Result:=d2; end; end. |
Сообщ.
#2
,
|
|
|
Чтобы из функции вернуть несколько значений, нужно возвращаемый результат сделать типа запись (record) с несколькими полями.
Кроме того, можно добавить var-параметр. А приведённый пример вообще намекает, что результат должен зависеть от количества вызовов, в этом случае нужно где-то хранить состояние. |
Сообщ.
#3
,
|
|
|
Функция вызывается один раз.
Как правильно прописать? type rec = record d1,d2:integer; end; |
Сообщ.
#4
,
|
|
|
Нашёл такую запись,никак не соединю:
type TComplex = record Re, Im: Double; function Create(ARe, AIm: Double): TComplex; end; function TComplex.Create(ARe, AIm: Double): TComplex; begin Result.Re:= ARe; Result.Im:= AIm; end; |
Сообщ.
#5
,
|
|
|
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type ololo = record d1:integer; d2:integer; end; type TForm2 = class(TForm) Label1: TLabel; Button1: TButton; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } function d (a:ololo):ololo; public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); var a:ololo; begin a.d1:=5; a.d2:=5; a:=d(a); //ссумируем Label1.Caption:=IntToStr(a.d1);//выводим d1 Label2.Caption:=IntToStr(a.d2);//выводим d2 end; function TForm2.d(a:ololo):ololo; begin Result.d1:=a.d1+a.d2*a.d1; Result.d2:=a.d1*2+a.d2*a.d1; end; end. |
Сообщ.
#6
,
|
|
|
Gonarh, спасибо большое.
|
Сообщ.
#7
,
|
|
|
Цитата Breind10 @ На форме кнопка Button и Label1 Label2: Скрытый текст unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Label1: TLabel; Button1: TButton; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } function d (a, b:integer):integer; public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); var i,i2,a,b:integer; begin a:=5; b:=5; i:=d(a,b); //ссумируем Label1.Caption:=IntToStr(i);//выводим d1 i2:=d(a,b); Label2.Caption:=IntToStr(i2);//выводим d2 end; function TForm2.d(a, b: integer): integer; var d1,d2: integer; begin d1:=a+b*a; //Присваиваем функции сумму переменных 1 Result:=d1; //d2:=a*2+b*a; //Присваиваем функции сумму переменных 2 //Result:=d2; end; end. создать две функции |
Сообщ.
#8
,
|
|
|
Создать две функции не всегда хорошо.
Например, деление нацело и остаток от деления вычисляются одной инструкцией процессора, потому код x := a div b; y := a mod b; это глупость с точки зрения производительности если оно не будет оптимизировано компилятором. Так же и в функциях. Выше был правильный ответ, использовать record. Нафига тут объект и ООП я не знаю, простейший вариант следующий: type TRec = record x,y:integer; end; function test(a,b:integer):TRec; begin result.x=1; result.y=2; end; |