IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

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

> Сортировки простым выбором и бинарными вставками
Offside
сообщение 20.12.2009 0:19
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


Нужно написать программу, сортирующию массив нескольких чисел по возрастанию методом бинарных вставок и простым выбором, и построить график зависимости кол-ва сравнений от длинны массива.

Код я написал, только не работает процедура сортировки бинарными вставками не работает, вывод общих результатов и построение графика =( Прошу помощи.

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.


Сообщение отредактировано: Offside - 20.12.2009 0:20
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 20.07.2025 9:41
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"