Динамический массив сам меняет длинну

Рейтинг: 0Ответов: 1Опубликовано: 07.10.2014

При запуске процедуры сортировки массив, бывает, урезает себя или, наборот, добавляет себе ячеек. Почему так и как исправить?

    program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const N=10;
Type
  DArr = array of integer;
var
  x,tmp,size:integer;
  arr:Darr;
procedure refill(var a:array of integer);
var
  i:integer;
begin
  randomize;
  for i:=0 to high(a) do
    a[i]:= random(98)+1;
end;

procedure print(var a:array of integer);
var
  i:integer;
begin
  for i:=0 to high(a) do
    write(a[i],' ');
  writeln;
end;
procedure bubble_sort(var a:array of integer; way:integer);//way нужен в дальнейшем
var
  i,j,tmp:integer;
  flag:boolean;
begin
    for i:=0 to high(a) do
    begin
      for j:=high(a) downto i do
        if a[j-1]>a[j] then
        begin
          tmp:=a[j-1];
          a[j-1]:=a[j];
          a[j]:=tmp;
        end;
    end;
end;

begin
  x:=11;
  SetLength(arr,N);
  size:=High(arr);
  refill(arr);
  while x<>0 do
  begin
    writeln('1.Bubble');
    writeln('2.Refill');
    writeln('3.Print');
    writeln('0.Exit');
    readln(x);
    case x of

      1:
      begin
        write('Up=1; Down=2: ');
        readln(tmp);
        bubble_sort(arr,tmp);
        print(arr);
      end;
      2:
        refill(arr);
      3:
        print(arr);
    end;
  end;
  SetLength(Arr,0);
  Finalize(Arr);

  { TODO -oUser -cConsole Main : Insert code here }
end.

Ответы

▲ 3Принят
for j:=high(a) downto i do

Если i=0, j будет идти до 0 и if a[j-1] будет a[-1] ничего не смущает?