procedure
TForm1
.
Button1Click(Sender: TObject);
var
i :
integer
;
begin
elm:=StrToInt(Edit1
.
Text);
Randomize;
if
(elm <
1
)
then
begin
ShowMessage(
'Oшибка. Массив не создан!'
);
elm:=
0
;
end
else
begin
StringGrid1
.
colcount:=elm;
StringGrid2
.
colcount:=elm;
StringGrid4
.
colcount:=elm;
end
;
for
i:=
1
to
elm
do
StringGrid1
.
Cells[i-
1
,
0
]:= IntToStr(Random(max)+
1
);
Button2
.
Visible:=
true
;
end
;
procedure
TForm1
.
Button2Click(Sender: TObject);
const
bf =
6
;
var
buf :
array
[
1..
bf]
of
integer
;
serBeg,ser,sera,serb,seraBeg,serbBeg :
integer
;
pust,pustf :
integer
;
f,f1,f2:
integer
;
p1,p2,p3:
integer
;
m :
array
[
1..3
,
1..2
]
of
integer
;
a,b,c :
integer
;
h, min, s, ms:
word
;
procedure
BubbleSort;
var
i,j,x :
integer
;
begin
for
i :=
1
to
bf-
1
do
for
j := i+
1
to
bf
do
if
buf[i]>buf[j]
then
begin
x := buf[i];
buf[i] := buf[j];
buf[j] := x
end
;
end
;
begin
serBeg:=
0
;
pust:=
0
;
ser:=
0
;
sera:=
0
;
serb:=
0
;
seraBeg:=
1
;
serbBeg:=
1
;
T2
.
ColCount:=
0
;
T3
.
ColCount:=
0
;
T1
.
ColCount:=
0
;
Label6
.
Caption:= FloatToStr(Time);
while
(serbeg<elm)
do
begin
for
i:=
1
to
bf
do
begin
if
(serBeg+i)<= elm
then
begin
buf[i]:= StrToInt(StringGrid1
.
Cells [serBeg-
1
+i,
0
]);
end
else
begin
buf[i]:=
0
;
pust:=pust+
1
;
end
;
end
;
BubbleSort;
ser:=ser+
1
;
T1
.
ColCount:=serBeg+bf;
for
i:=
1
to
bf
do
T1
.
Cells[serBeg-
1
+i,
0
]:=IntToStr(buf[i]);
serBeg := serBeg+bf;
end
;
f1:=
0
;f2:=
1
;
f:=f1+f2;
while
(f<ser)
do
begin
f1:=f2;
f2:=f;
f:=f1+f2;
end
;
pustf:=f-ser;
for
j:=
1
to
pustf
do
begin
ser:=ser+
1
;
T1
.
ColCount:=serBeg+bf;
for
i:=
1
to
bf
do
begin
T1
.
Cells[serBeg-
1
+i,
0
]:=IntToStr(
0
);
pust:= pust+
1
;
end
;
serBeg := serBeg+bf;
end
;
p1:=bf*f1;
p2:=bf*f2;
p3:=p1+p2;
T2
.
ColCount:=p1;
T3
.
ColCount:=p2;
for
i:=
1
to
p1
do
T2
.
Cells[i-
1
,
0
]:=T1
.
Cells[i-
1
,
0
];
p1:=p1;
for
i:=
1
to
p2
do
T3
.
Cells[i-
1
,
0
]:=T1
.
Cells[i-
1
+p1,
0
];
m[
1
,
1
]:=
0
;
m[
2
,
1
]:=f1;
m[
3
,
1
]:=f2;
m[
1
,
2
]:=
0
;
m[
2
,
2
]:=bf;
m[
3
,
2
]:=bf;
i:=
1
;
j:=
1
;
k:=
1
;
while
m[
1
,
1
]+m[
2
,
1
]+m[
3
,
1
]<>
1
do
begin
if
m[
1
,
1
]=
0
then
begin
k:=
1
;
m[
1
,
2
]:=m[
2
,
2
]+m[
3
,
2
];
if
m[
2
,
1
]<m[
3
,
1
]
then
T1
.
ColCount:=m[
2
,
1
]*m[
1
,
2
]
else
T1
.
ColCount:=m[
3
,
1
]*m[
1
,
2
];
while
m[
2
,
1
]*m[
3
,
1
]<>
0
do
begin
b:=m[
2
,
2
];
c:=m[
3
,
2
];
while
(b*c)<>
0
do
begin
if
StrToInt(T2
.
Cells[i-
1
,
0
]) < StrToInt(T3
.
Cells[j-
1
,
0
])
then
begin
T1
.
Cells[k-
1
,
0
]:= T2
.
Cells[i-
1
,
0
];
i:=i+
1
;
b:=b-
1
;
end
else
begin
T1
.
Cells[k-
1
,
0
]:= T3
.
Cells[j-
1
,
0
];
j:=j+
1
;
c:=c-
1
;
end
;
k:=k+
1
;
end
;
if
b=
0
then
begin
while
c<>
0
do
begin
T1
.
Cells[k-
1
,
0
]:= T3
.
Cells[j-
1
,
0
];
j:=j+
1
;
c:=c-
1
;
k:=k+
1
;
end
;
end
else
begin
while
b<>
0
do
begin
T1
.
Cells[k-
1
,
0
]:= T2
.
Cells[i-
1
,
0
];
i:=i+
1
;
b:=b-
1
;
k:=k+
1
;
end
;
end
;
m[
1
,
1
]:=m[
1
,
1
]+
1
;
m[
2
,
1
]:=m[
2
,
1
]-
1
;
m[
3
,
1
]:=m[
3
,
1
]-
1
;
end
;
k:=
1
;
end
else
if
m[
2
,
1
]=
0
then
begin
i:=
1
;
m[
2
,
2
]:=m[
1
,
2
]+m[
3
,
2
];
if
m[
1
,
1
]<m[
3
,
1
]
then
T2
.
ColCount:=m[
1
,
1
]*m[
2
,
2
]
else
T2
.
ColCount:=m[
3
,
1
]*m[
2
,
2
];
while
m[
1
,
1
]*m[
3
,
1
]<>
0
do
begin
a:=m[
1
,
2
];
c:=m[
3
,
2
];
while
(a*c)<>
0
do
begin
if
StrToInt(T1
.
Cells[k-
1
,
0
]) < StrToInt(T3
.
Cells[j-
1
,
0
])
then
begin
T2
.
Cells[i-
1
,
0
]:= T1
.
Cells[k-
1
,
0
];
k:=k+
1
;
a:=a-
1
;
end
else
begin
T2
.
Cells[i-
1
,
0
]:= T3
.
Cells[j-
1
,
0
];
j:=j+
1
;
c:=c-
1
;
end
;
i:=i+
1
;
end
;
if
a=
0
then
begin
while
c<>
0
do
begin
T2
.
Cells[i-
1
,
0
]:= T3
.
Cells[j-
1
,
0
];
j:=j+
1
;
c:=c-
1
;
i:=i+
1
;
end
;
end
else
begin
while
a<>
0
do
begin
T2
.
Cells[i-
1
,
0
]:= T1
.
Cells[k-
1
,
0
];
k:=k+
1
;
a:=a-
1
;
i:=i+
1
;
end
;
end
;
m[
2
,
1
]:=m[
2
,
1
]+
1
;
m[
1
,
1
]:=m[
1
,
1
]-
1
;
m[
3
,
1
]:=m[
3
,
1
]-
1
;
end
;
i:=
1
;
end
else
if
m[
3
,
1
]=
0
then
begin
j:=
1
;
m[
3
,
2
]:=m[
1
,
2
]+m[
2
,
2
];
if
m[
1
,
1
]<m[
2
,
1
]
then
T3
.
ColCount:=m[
1
,
1
]*m[
3
,
2
]
else
T3
.
ColCount:=m[
2
,
1
]*m[
3
,
2
];
while
m[
1
,
1
]*m[
2
,
1
]<>
0
do
begin
a:=m[
1
,
2
];
b:=m[
2
,
2
];
while
(a*b)<>
0
do
begin
if
StrToInt(T1
.
Cells[k-
1
,
0
]) < StrToInt(T2
.
Cells[i-
1
,
0
])
then
begin
T3
.
Cells[j-
1
,
0
]:= T1
.
Cells[k-
1
,
0
];
k:=k+
1
;
a:=a-
1
;
end
else
begin
T3
.
Cells[j-
1
,
0
]:= T2
.
Cells[i-
1
,
0
];
i:=i+
1
;
b:=b-
1
;
end
;
j:=j+
1
;
end
;
if
a=
0
then
begin
while
b<>
0
do
begin
T3
.
Cells[j-
1
,
0
]:= T2
.
Cells[i-
1
,
0
];
i:=i+
1
;
b:=b-
1
;
j:=j+
1
;
end
;
end
else
begin
while
a<>
0
do
begin
T3
.
Cells[j-
1
,
0
]:= T1
.
Cells[k-
1
,
0
];
k:=k+
1
;
a:=a-
1
;
j:=j+
1
;
end
;
end
;
m[
3
,
1
]:=m[
3
,
1
]+
1
;
m[
1
,
1
]:=m[
1
,
1
]-
1
;
m[
2
,
1
]:=m[
2
,
1
]-
1
;
end
;
j:=
1
;
end
;
end
;
if
m[
1
,
1
]=
1
then
for
i:=
1
to
elm
do
begin
StringGrid2
.
Cells[i-
1
,
0
]:=T1
.
Cells[i-
1
+pust,
0
];
StringGrid4
.
Cells[elm-i,
0
]:=T1
.
Cells[i-
1
+pust,
0
];
end
;
if
m[
2
,
1
]=
1
then
for
i:=
1
to
elm
do
begin
StringGrid2
.
Cells[i-
1
,
0
]:=T2
.
Cells[i-
1
+pust,
0
];
StringGrid4
.
Cells[elm-i,
0
]:=T2
.
Cells[i-
1
+pust,
0
];
end
;
if
m[
3
,
1
]=
1
then
for
i:=
1
to
elm
do
begin
StringGrid2
.
Cells[i-
1
,
0
]:=T3
.
Cells[i-
1
+pust,
0
];
StringGrid4
.
Cells[elm-i,
0
]:=T3
.
Cells[i-
1
+pust,
0
];
end
;
DecodeTime(Time-StrToFloat(Label6
.
Caption), h, min, s, ms);
Label6
.
Caption:= IntToStr(s)+
's '
+ IntToStr(ms)+
'ms'
;
Edit2
.
Visible:=
true
;
end
;
end
.