Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите исправить ошибку
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Dunkel_L
Вот код проги
Нужно исправить

Program HeapSortandBinaryInsertion;
Uses CRT;

Type
  mas=array[1..1000]of integer;
Var
  m:mas;
  n:integer;

Procedure input(var m:mas;n:integer);
Var
 i,k:integer;
Begin
randomize;
k:=100;
  For i:=1 to n do
   Begin
    m[i]:=random(2*k)-(k);
   end;
end;

Procedure output(m:mas;n:integer);
Var
 i:integer;
Begin
  For i:=1 to n do
    Write(m[i]:5);
end;
{--------------В ЭТОМ МЕСТЕ ОШИБКА}
{--------------Binarnaya vstavka-------------------}
Procedure BinaryInsertion(m:mas; n:integer);
  var i,j,L,R: integer;
      x:integer;
      a:integer;
  begin
  for i:=2 to n do
    begin
    x:=a[i];
    L:=1;
    R:=i;
    while L<R do
      begin
      m:=(L+R) div 2;
      if a[m]<=x then L:=m+1
      else R:=m;
    end;
    for j:=i downto R+1 do
   {begin}
   a[j]:=a[j-1];  {Sdvig}

    end;
    a[R]:=x;{Vstavka}

  end;
  end;

{---------------------------------------------------}
{---------------КОНЕЦ----------------------------}
Procedure sift(l,r:integer);{Procedure proseivaniya}
Var
 i,j,x:integer;
     Begin
     i:=l;
     j:=2*l;
     x:=m[l];
     if (j<r) and (m[j]<m[j+1]) then j:=j+1;
      while (j<=r) and (x<m[j]) do
       Begin
        m[i]:=m[j];
        i:=j;
        j:=2*j;
         if (j<r) and (m[j]<m[j+1]) then j:=j+1;
       end;
      m[i]:=x;
    end;

{---------------------------------------------------}

Procedure HpSt(var m:mas;n:integer);{Procedure HeapSort}
Var
 l,r,x:integer;
Begin
 l:=(n div 2)+1;
 r:=n;
 While l>1 do
  Begin
   l:=l-1;
   sift(l,r)
  end;
 While r>10 do
  Begin
   x:=m[1];
   m[1]:=m[r];
   m[r]:=x;
   r:=r-1;
   sift(1,r);
  end;
if r<=10 then prvi(m,r);
  { esli r bol'she desyati programma reshaet cherez HeapSort,
    a esli men'she ili ravno 10 to cherez Binarnuyu vstavku }
end;

{---------------------------------------------------}

Begin
clrscr;
Write('Vvedite dlinu massiva =');
Readln(n);
Input(m,n); {Procedura:vvod znacheniya massiva}
Writeln('Исходный массив:');
Output(m,n);{Procedura:vyvod massiva na ekran}
Writeln('');
Writeln('');
Hpst(m,n);
Writeln('Otsortirovannyi massiv :');
OutPut(m,n);
ReadLn;
end.
volvo
Во-первых, читай правила (это о названии темы)... Второе - сортировка вставкой есть у нас в FAQ-е...
Ну и по теме: ты перепутал всё, что только возможно - вот правильный вариант:
Procedure BinaryInsertion(var a: mas; n: integer);
var
  i, j, L, R: integer;
  x, m: integer;
begin
  for i:=2 to n do begin
    x:=a[i];
    L:=1;
    R:=i;
    while L<R do begin
      m:=(L+R) div 2;
      if a[m]<=x then L:=m+1
      else R:=m;
    end;

    for j:=i downto R+1 do begin
      a[j]:=a[j-1]; {Sdvig}
    end;

    a[R]:=x;{Vstavka}

  end;
end;

Использование:
Output(m,n);{Procedura:vyvod massiva na ekran}
Writeln('');
binaryInsertion(m, n);
Writeln('');
Dunkel_L
Большое СПАСИБО.
тема закрыта smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.