unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 =
class
(TForm)
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Memo1: TMemo;
Memo2: TMemo;
Edit1: TEdit;
Label1: TLabel;
procedure
Button1Click(Sender: TObject);
private
public
end
;
TThread1 =
class
(TThread)
public
res :
array
of
integer
;
constructor
Create(CreateSuspended:
Boolean
);
destructor
Destroy; override;
protected
procedure
Execute; override;
end
;
TThread2 =
class
(TThread)
public
res :
array
of
integer
;
constructor
Create(CreateSuspended:
Boolean
);
destructor
Destroy; override;
protected
procedure
Execute; override;
end
;
var
Form1: TForm1;
a:
array
of
integer
;
n:
integer
;
implementation
{$R *.dfm}
constructor
TThread1
.
Create(CreateSuspended:
Boolean
);
begin
inherited
;
Setlength(res,n+
2
);
end
;
constructor
TThread2
.
Create(CreateSuspended:
Boolean
);
begin
inherited
;
Setlength(res,n+
2
);
end
;
destructor
TThread1
.
Destroy;
begin
SetLength(res,
0
);
res :=
nil
;
inherited
;
end
;
destructor
TThread2
.
Destroy;
begin
Setlength(res,
0
);
res :=
nil
;
inherited
;
end
;
procedure
TThread1
.
Execute;
var
i,j,x:
Integer
;
begin
for
i:=
0
to
n-
1
do
res[i]:=a[i];
for
i :=
0
to
n-
1
do
for
j :=
0
to
n-
1
do
if
res[j] < res[j+
1
]
then
begin
x := res[j+
1
];
res[j+
1
] := res[j];
res[j] := x;
end
;
end
;
procedure
TThread2
.
Execute;
var
i,j,x:
Integer
;
begin
for
i:=
0
to
n-
1
do
res[i]:=a[i];
for
i :=
0
to
n-
1
do
for
j :=
0
to
n-
1
do
if
res[j] > res[j+
1
]
then
begin
x := res[j+
1
];
res[j+
1
] := res[j];
res[j] := x;
end
;
end
;
procedure
TForm1
.
Button1Click(Sender: TObject);
var
T1 : TThread1;
T2 : TThread2;
i,t:
integer
;
begin
val
(Edit1
.
Text, n, t);
if
t>
0
then
begin
showmessage(
'неверный формат или поле не заполнено'
);
exit;
end
;
Setlength(a,n+
2
);
For
i :=
0
To
n-
1
Do
a[i]:= Random(
100
);
T1 := TThread1
.
Create(
True
);
T2 := TThread2
.
Create(
True
);
T1
.
Resume;
T2
.
Resume;
T1
.
WaitFor;;
T2
.
WaitFor;
For
i :=
0
To
n-
1
Do
Memo1
.
Lines
.
Add(IntToStr(T1
.
res[i]));
For
i :=
0
To
n-
1
Do
Memo2
.
Lines
.
Add(IntToStr(T2
.
res[i]));
T1
.
Free;
T2
.
Free;
end
;
end
.