Помощь - Поиск - Пользователи - Календарь
Полная версия: сортировки и их сравнение
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Zq@r
:p2:
народ есть задачка!
но что то не клеиться!
вот собсвенна она :

Исследовать число перемещений элементов в массиве для следующих методов сортировок:
1) шейкерная сортировка;
2) сортировка с помощью бинарных вставок.
Анализ числа перемещений произвести на массивах размерностью 200, 800, 1000, 5000, 10000, а также на следующих типах массивов:
1) случайный;
2) сортированный;
3) частично-сортированный;
4) перевернутый.
Смотрим что быстрее
Вычисления проводятся несколько раз; затем искомые результаты выводятся на экран в таблице.


unit  sorts;        {модуль сортировки}
 interface
  uses   crt;
const c=5;
a:array[1..c]  of
integer=(200,800,1000,5000,10000);
    g=10000;
 var z:array[1..g] of integer;
    cpl, cp2:array[1..5,1..4] of longint;
     u,v,w,kx,ky:byte;
    p,q,Mminl,Mavel,Mmaxl,Mave2,Mmax2,t:longint;
    i,k,r,l,m,j,x,n:integer;
     procedure binary_insert;
     procedure shaker_sort;
     procedure virt;
     implementation
     procedure binary_insert;
    begin q:=0; n:=a[u];
 for i:=2 to n do begin
x:=z[i];
q:=q+l;
r:=i;
l:=1;
while l<r do
begin
m:=(l+r) div 2;
if z[m]<x then l:=m+l
else r:=m; end;
for  j:=i   downto  r+1   do begin
z[j] :=z [j-1] ;
 q:=q+l;
  end;
z[r]:=x; q:=q+l;
 end;
cpl[u,v]:=q;
 end;
procedure shaker_sort;
begin
p:=0;
n:=a[u];
l:=2;
r:=n ;
 k:=n ;
  repeat
    for j:=r downto  l   do
     if z[j-l]>z[j]   then
      begin
    x:=z [j-1] ;
     z[j-l]:=z[j] ;
     z[j]:=x;
     k:=j;
     p:=p+3;
 end;
 l:=k+l;
 for j:=l   to  r  do
 if  z[j-l]>z[j]   then
 begin
x:=z[j-1] ;
z[j-1]:=z[j] ;
z[j]:=x ;
k:=j;
p:=p+3;
end;
r:=k-1; { nenenennenenenenn 1}
 until l>r;
 cp2[u,v]:=p;
  end;
end

 unit  massive;   {муодуль  с процелурами длдя задание исходных данных}
 interface
uses  sorts, crt;
  procedure  rand_mas;
  procedure  sort_mas;
  procedure  obr__mas;
  procedure  sort_part_mas;
  implementation
  procedure  rand_mas; begin
randomize;
for  i:=l   to  a[u]   do
z [i]:=random(100) -50;
 end;
procedure  sort_mas;
 begin
for  i:=l   to  a[u]   do
z[i]:=i;
 end;
procedure  obr_mas;
begin
for  i:=l   to  a[u]   do
z[i]:=a[u]+l-i; end;
procedure  sort_part_mas ;
begin
for  i:=l   to  a[u]   do begin
if   (i  mod  40=0)    then
   for k:=i  down to  i-10  do
z[k]:=k else
z[i]:=random(50)-100;
     end;
  end;
 END.



       unit outme;  {модуль вывод результатов в таблице}
       interface
uses crt,sorts;
 var ex,cy:byte;
 procedure tabliza;
  procedure out_cp;
  procedure out;
   procedure pod;
   procedure process;
    procedure bar;
     procedure complete;
      implementation
     procedure tabliza; begin
clrscr;
gotoxy (1 f 0) ;
textcolor(yellow);
table{-таблица-} end;
procedure  out_cp; begin
textcolor(red);
write (cpl[i,j]);
gotoxy (kx,ky+2);
textcolor(green);
write (cp2[i,j]); end;
procedure  out;      {таблица}
 begin
 gotoxy (2,1) ;
i:=1;
ky:=5;
while i<=5 do
begin
j:=1;
kx:=9;
while j<=4 do
begin
gotoxy (kx,ky);
out_cp;
j:=j+1;
kx:=kx+ll;
 end;
  i:=i+l;
  ky:=ky+4;
end;
 end;
procedure pod;
begin
gotoxy (10, wherey+5) ;
textcolor(white);
write ('table of sorts.');
gotoxy(25,wherey);
write ( 'sort (  /  ) ');
gotoxy(31,wherey);
textcolor (red+blink);
write('by binary insert');
gotoxy(48,wherey);
textcolor(green+blink);
write('by shaker sort');
textcolor(yellow); end;
procedure process; begin
textcolor (blue);
gotoxy (6,1 7) ;
table{-табличка-}
ex:=7;
cy:=18;
gotoxy(4,15);
textcolor(white+blink);
writeln('rabotayu........jdite..... '); end;

procedure bar; begin
gotoxy (ex, cy) ;
textcolor(white) ;
write(#221) ;
cx:=cx+l;
 end;
procedure complete;
 begin
write (#7) ;
gotoxy(4,15);
clreol;
gotoxy (20,22);
textcolor(white);
writeln ('YA VIPOLNIL!!!! ');
readln;
  end;
 END.


  { Основная программа:}
program  shaker_binary;
uses massive,sorts,crt,outme;
BEGIN
textbackground(black) ;
clrscr;
process;
for w:=l to 2 do
begin
if w:=2 then
for i:=l to g do
z[i]:=0;
for u:=l to с do
 for v:=l to c1044-1 do
  begin
case v of
1: begin sort_mas; bar end;
2: begin obr__mas; bar end;
3: begin rand__mas ; bar end;
 4: begin sort__part_mas; bar end;
  end;
  if w:=l then
binary_insert else
shaker_sort;
end; end;
complete;
 gotoxy(2,2) ;
 tabliza;
 out;
  pod;
   cap;
   readln;
    END.




вообщем что то не пашит помогите плиз
:fire:
volvo
Цитата
вообщем что то не пашит
Уж очень это расплывчато. Что именно? Куда смотреть? Сама программа не запускается, или результаты подозрительные?
Zq@r
угу прога не запускаться...

я чтото с юнитами намутил... и они подгружаться не хотят... или что?
уже 6 часов парюсь.. голова опухла . а надо срочняк!
sad.gif
volvo
Модуль sorts:
  procedure virt;
описана но не реализована...

В модуле massive.pas (процедура sort_part_mas) соедини слова down и to (downto должно быть записано вместе)...
Там же
procedure  obr__mas;
описана но не реализована...

В модуле outme (процедура tabliza) непонятно что за параметры передаются в gotoxy...
gotoxy (1 f 0) ;

там же (и еще в процедуре process):
table{-таблица-}

что это значит?

(процедура out):
kx:=kx+ll;

замени на
kx:=kx+l;


Процедура bar должна быть такой:
procedure bar;
begin
  gotoxy(ex, cy);
  textcolor(white);
  write(#221);
  ex:=ex+l;
end;


Ну и в основной программе много символов кириллицы в именах переменных - это недопустимо...
Пока все... Попробуй исправить это...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.