Код я написал, только не работает процедура сортировки бинарными вставками не работает, вывод общих результатов и построение графика =( Прошу помощи.
program sortirovky;
uses crt,graph;
const n20=20; n200=200;
type mass_200=array[1..n200]of integer;
mass_20=array[1..n20]of longint;
var m,a:mass_200;
m_bv_sort,m_pv_sort:mass_20;
col,kol:longint;
dr,mode:integer;
procedure zapolnenie(var m:array of integer; n:integer);
var i:integer;
begin
for i:=1 to n do
m[i]:=random(50);
end;
procedure vivod_1(var m:array of integer; n:integer);
var i:integer;
begin
for i:=1 to n do
write(m[i]:4);
writeln;
writeln('--------------------------------------------------------------------------------');
writeln;
end;
procedure vivod_2(var mas:mass_20; n_1,n_2:integer);
var i:integer;
begin
for i:=n_1 to n_2 do
write(mas[i]:8);
end;
Procedure Sort_BinVs (var M:array of integer; n:integer);
Var K,I,j,l,X:integer;
Begin
k:=1;
while (k<N) and (M[k]<=M[k+1]) do
begin
inc(k);
end;
if k+1<>N then
begin
for i:=k+1 to N do
begin
X:=M[i];
j:=i;
while ((m[j-1]>x)or(m[j]<x))and(j>0) do
if m[j-1]>x then j:=j div 2
else j:=(i+j) div 2;
for l:=i-1 downto j do
M[l+1]:=M[l];
M[j+1]:=X;
end;
end;
End;
Procedure Sort_vibor (var d:array of integer; n:integer);
Var K,I,j,max:integer;
Begin
for i:=n downto 2 do
begin
k:=i; max:=d[k];
for j:=1 to i-1 do
if max<d[j] then
begin
k:=j;
max:=d[k];
end;
if k<>i then
begin
d[k]:=d[i];
d[i]:=max;
end;
end;
End;
procedure test1;
var i:integer;
begin
for i:=1 to 10 do
begin
zapolnenie(a,i*20);
m:=a;
col:=0;
kol:=0;
sort_BinVs(m,i*20);
m_bv_sort[i]:=col;
m_bv_sort[i+10]:=kol;
m:=a;
col:=0;
kol:=0;
Sort_vibor(m,i*20);
m_pv_sort[i]:=col;
m_pv_sort[i+10]:=kol;
m:=a;
col:=0;
kol:=0;
end;
end;
procedure test2;
begin
writeln(' massiv:');
zapolnenie(a,9);
m:=a;
writeln(' metod binarnoy vstavki:');
vivod_1(a,9);
Sort_BinVs(m,9);
vivod_1(m,9);
writeln(' metod prostyh vstavok:');
m:=a;
vivod_1(a,9);
Sort_vibor(m,9);
vivod_1(m,9);
write('-------------------');
writeln(' press any key...');
readkey;
end;
procedure vivod_3;
begin
writeln('---------------------------------------------');
writeln('N: 20 40 60 80 100 120 140 160 180 200');
write(' metod binarnoy vstavki -------------------');
writeln(' - k-vo sravneniy:');
vivod_2(m_bv_sort, 1, 10);
writeln(' - k-vo perestanovok:');
vivod_2(m_bv_sort, 11, 20);
write(' sortirovka prostym viborom ---------------');
writeln(' - k-vo sravneniy:');
vivod_2(m_pv_sort, 1, 10);
writeln(' - k-vo perestanovok:');
vivod_2(m_bv_sort, 11, 20);
write('----------------------------------');
write(' press any key...');
readkey;
end;
procedure graf(mas:mass_20; n:byte; mashtab:integer; nazvanie:string);
var i,fl:byte;
begin
line(45, 460, 80, 460-(mas[n+1]*40 div mashtab));
fl:=0;
for i:=1 to 9 do
begin
if ((460-(mas[i+n+1]*40/mashtab))<0)and(fl=0) then
begin
outtextxy(80+i*35, 450-(mas[i+n]*40 div mashtab), nazvanie);
fl:=1;
end;
line(45+i*35, 460-(mas[i+n]*40 div mashtab), 80+i*35, 460-(mas[i+n+1]*40 div mashtab));
end;
if fl=0 then outtextxy(80+i*35, 450-(mas[i+n+1]*40 div mashtab), nazvanie);
end;
procedure grafic(tip:byte);
var key:char;
i,mashtab,n:integer;
st:string;
begin
initgraph(dr,mode,'I:\Soft\TurboPascal\TurboPascal\BGI');
if graphresult=0 then
begin
line(45,0,45,getmaxy);
line(0,460,500,460);
outtextxy(430,465,'k-vo elementov');
if tip=1 then
begin
outtextxy(53,10,'k-vo sravneniy');
mashtab:=3000;
n:=0;
end
else
begin
outtextxy(53,10,'k-vo perestanovok');
mashtab:=1000;
n:=10;
end;
setcolor(8);
outtextxy(37,465,'0');
for i:=1 to 10 do
begin
line(45,460-i*40,395,460-i*40);
line(45+i*35,460,45+i*35,60);
str(i*20,st);
outtextxy(35+i*35,465,st);
str(i*mashtab,st);
outtextxy(5,465-i*40,st);
end;
setcolor(10);
graf(m_bv_sort, n, mashtab,'bin vst');
setcolor(12);
graf(m_pv_sort, n, mashtab,'prost vyb');
readkey;
closegraph;
end
else
begin
writeln('GRAFIKA NE RABOTAET press any key...');
readkey;
end;
end;
begin
clrscr;
randomize;
test2;
test1;
vivod_3;
grafic(1);
grafic(2);
end.