1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Нужно написать программу, сортирующию массив нескольких чисел по возрастанию методом бинарных вставок и простым выбором, и построить график зависимости кол-ва сравнений от длинны массива.
Код я написал, только не работает процедура сортировки бинарными вставками не работает, вывод общих результатов и построение графика =( Прошу помощи.
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;
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.
Сообщение отредактировано: Offside - 20.12.2009 0:20