Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2010, 15:22   #1
bezkor
Новичок
Джуниор
 
Регистрация: 16.05.2010
Сообщений: 2
По умолчанию Pascal - подключения сопроцессора и методы сортировки

Друзья,
я новичек, и мне очень нужна Ваша помощь!
Мне необходимо подключить сопроцессор и посортировать массив чисел методом HOAR (быстрая сортировка) используя СТЕК.

У меня есть код, который просто сортирует методoм HOAR. Я нашел как использовать СТЕК, но почемуто не хочет компилироваться...
А как подключить сопроцессор - вообще не понимаю.

Вот весь код программы, в котором применена просто сортировка HOAR:

Код:
uses Dos;

const n = 10000;

var
  count:byte;
    a,arr:Array[1..n] of integer;
      i:integer;
      h,m,s,hund,timer:word;
      times:Array[1..3,1..100] of byte;


procedure vvod;
begin
  write('Vvedite kolichestvo isputaniy:');
  readln(count);
end;

procedure zapolnenie;
var i,j:integer;
begin
  randomize;
   for i:=1 to n do
     a[i]:=random(maxint-1);

   for i:=1 to 3 do
     for j:=1 to 100 do
       times[i][j]:=0;
end;

procedure sort_puzurek;
var i,j,y:integer;
begin
  arr:=a;
  for i := 2 to n do
    begin
      for j := n downto i do
      begin
        if arr[j-1] > arr[j] then
        begin
          y:=arr[j-1];
          arr[j-1]:=arr[j];
          arr[j]:=y;
        end;
      end;
    end;
end;

procedure sort_vubor;
var i,j,r,y:integer;
begin
  arr:=a;
   for i := 1 to n-1 do
  begin
    r := i;
    for j := i+1 to n do
      if arr[r] > arr[j] then
        r := j;
    y:=arr[r];
    arr[r]:=arr[i];
    arr[i]:=y;
  end;
end;

procedure sort_hoar(L,R:integer);
var x,y,i,j:integer;
begin
arr:=a;
  x:=arr[(L+R) div 2];
  i:=L;
  j:=R;
   while i<=j do
    begin
      while arr[i]<x do
        i:=i+1;
      while arr[j]>x do
        j:=j-1;
      if i<=j then
      begin
        y:=arr[i];
        arr[i]:=arr[j];
        arr[j]:=y;
        i:=i+1;
        j:=j-1;
      end;
    end;
   if L<j then
     sort_hoar(L,j);
   if i<R then
     sort_hoar(i,R);
end;

procedure vuvod;
var i,j:byte;
    s:string;
begin
  writeln(' puzurek | vubor | hoar');
  for i:=1 to count do
  begin
    if times[1][i] <> 0 then
    begin
      write(' ');
      write(times[1][i]);
      str(times[1][i],s);
       for j:=(7-length(s)) to 9 do
        begin
          write(' ');
        end;
      write('| ');
      write(times[2][i]);
      str(times[2][i],s);
       for j:=(5-length(s)) to 7 do
        begin
          write(' ');
        end;
      write('| ');
      write(times[3][i]);
      str(times[3][i],s);
       for j:=(4-length(s)) to 6 do
        begin
          write(' ');
        end;
      writeln;
                {writeln(' ',times[1][i],' | ',times[2][i],' | ',times[3][i]);}
    end;
  end;

  readln;
end;

begin
  vvod;
  zapolnenie;

   if (count) > 10 then begin
   for i:=1 to count do
  begin
    GetTime(h,m,s,hund);
    timer:=s*100+hund;
    sort_puzurek;
    GetTime(h,m,s,hund);
    times[1][i]:=s*100+hund-timer;

    GetTime(h,m,s,hund);
    timer:=s*100+hund;
    sort_vubor;
    GetTime(h,m,s,hund);
    times[2][i]:=s*100+hund-timer;

    GetTime(h,m,s,hund);
    timer:=s*100+hund;
    sort_hoar(1,n);
    GetTime(h,m,s,hund);
    times[3][i]:=s*100+hund-timer;
  end;
  vuvod;
  End
  else
    writeln('error!!!'); 
end.
Вот образец - с использованием СТЕК, но куда и как его правильно вставить, что б программа работала??

Код:
procedure quickSort(var X: itemArray; n: integer);
type
  p_node = ^node;
  node = record
           node: integer;
           next: p_node
         end;
var
  l,r,i,j: integer;
  stack: p_node;
  temp: item;
 
  procedure push(i: integer);
  var
    temp: p_node;
  begin
    new(temp);
    temp^.node:=i;
    temp^.next:=stack;
    stack:=temp
  end;
 
  function pop: integer;
  var
    temp: p_node;
  begin
    if stack=nil then
      pop:=0
    else
    begin
      temp:=stack;
      pop:=stack^.node;
      stack:=stack^.next;
      dispose(temp)
    end
  end;
 
begin
  stack:=nil;
  push(n-1);
  push(0);
  repeat
    l:=pop;
    r:=pop;
    if r-l=1 then
    begin
      if compare(X[l],X[r]) then
        change(X[l],X[r])
    end
    else
    begin
      temp:=x[(l+r) div 2]; {random(r-l+1)+l}
      i:=l;
      j:=r;
      repeat
        while compare(temp,X[i]) do i:=i+1;
        while compare(X[j],temp) do j:=j-1;
        if i<=j then
        begin
          change(X[i],X[j]);
          i:=i+1;
          j:=j-1
        end;
      until i>j;
      if l<j then
      begin
        push(j);
        push(l)
      end;
      if i<r then
      begin
        push(r);
        push(i)
      end
    end;
  until stack=nil
end;
И собственно как и куда подключать сопроцессор?
Спасибо Вам заранее за расмотрение моего вопроса!
bezkor вне форума Ответить с цитированием
Старый 16.05.2010, 19:02   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Pascal какой?
Если Turbo, то {$N+} - подключает сопроцессор.
Взял вот отсюда : http://www.citforum.ru/programming/bp70_lr/lr15.shtml
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 16.05.2010, 20:32   #3
bezkor
Новичок
Джуниор
 
Регистрация: 16.05.2010
Сообщений: 2
По умолчанию

Спасибо!
а в каком месте это нада писать? потому что я вообще не понимаю
bezkor вне форума Ответить с цитированием
Старый 17.05.2010, 08:45   #4
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Да лучше установи соответствующую опцию компилятора и забудь. Сейчас на всех компах сопроцессор, так что про эмуляцию можно забыть!
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Методы сортировки с квадратичной трудоемкостью ai\ekcah^p Общие вопросы C/C++ 4 08.07.2010 21:53
Методы сортировки массивов!!! >>arty<< Помощь студентам 2 20.01.2010 18:39
Паскаль методы сортировки Igomax Помощь студентам 5 24.10.2009 15:59
Методы сортировки. Teddy Помощь студентам 1 16.10.2008 19:08