Помощь - Поиск - Пользователи - Календарь
Полная версия: сортировки и их сравнение
Форум «Всё о Паскале» > 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;


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