Помогите, пишет индекс находиться вне зоны массива

uses crt;
const n=10;

type mas=array[1..n] of real;
procedure sort(var a:mas;i1,ip:integer);
var i,j,id_max:integer;
max:real;
begin
j:=ip;
while j>i1 do
begin
max:=a[i1];
id_max:=i1;
for i:=i1+1 to j do
if a[i]>max then
begin
max:=a[i];
id_max:=i
end;
if id_max<ip then
begin
a[id_max]:=a[j];
a[j]:=max;
end;
j:=j-1
end;
end;

var
a:mas;
i:integer;
k:integer;
x:real;
j:integer;
begin
clrscr;
randomize;
writeln('Исходный массив');
for i:=1 to n do
begin
a[i]:=random(101) - 50;
write(a[i]:8:2);
end;
writeln;
k:=0;
for i:=1 to n do
if trunc(a[i])>1 then
begin
inc(k);
x:=a[i];
for j:=i downto k+1 do
a[j]:=a[j-1];
a[k]:=x;
end;
for i:=1 to n do
  if a[i]>0 then k:=k+1;
  Writeln('Кол-во элементов =',k);

writeln('Перестановка больших 1 вперед:');
for i:=1 to n do
write(a[i]:8:2);
writeln;
sort(a,1,k);
sort(a,k+1,n);
writeln('Сортировка частей по возрастанию');
for i:=1 to n do
write(a[i]:8:2);
readln
end.

Ну видимо так и есть, не надо к элементам за пределами массива обращаться )
В какой строке-то хоть?

И невозможно ж такой код читать, закинули б хотя бы сюда: https://pak.lebah.web.id/jcf.cgi

uses
  crt;

const
  n = 10;

type
  mas = array[1..n] of real;

procedure sort(var a: mas; i1, ip: integer);
var
  i, j, id_max: integer;
  max: real;
begin
  j := ip;
  while j > i1 do
  begin
    max := a[i1];
    id_max := i1;
    for i := i1 + 1 to j do
      if a[i] > max then
      begin
        max := a[i];
        id_max := i;
      end;
    if id_max < ip then
    begin
      a[id_max] := a[j];
      a[j] := max;
    end;
    j := j - 1;
  end;
end;

var
  a: mas;
  i: integer;
  k: integer;
  x: real;
  j: integer;
begin
  clrscr;
  randomize;
  writeln('Исходный массив');
  for i := 1 to n do
  begin
    a[i] := random(101) - 50;
    write(a[i]: 8: 2);
  end;
  writeln;
  k := 0;
  for i := 1 to n do
    if trunc(a[i]) > 1 then
    begin
      Inc(k);
      x := a[i];
      for j := i downto k + 1 do
        a[j] := a[j - 1];
      a[k] := x;
    end;
  for i := 1 to n do
    if a[i] > 0 then
      k := k + 1;
  writeln('Кол-во элементов =', k);

  writeln('Перестановка больших 1 вперед:');
  for i := 1 to n do
    write(a[i]: 8: 2);
  writeln;
  sort(a, 1, k);
  sort(a, k + 1, n);
  writeln('Сортировка частей по возрастанию');
  for i := 1 to n do
    write(a[i]: 8: 2);
  readln;
end.

Строка 21

А что за задача, какой алгоритм сортировки?

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
Количество положительных элементов массива.

Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых превышает единицу, а потом – все остальные.Упорядочить каждую часть массива по возрастанию, используя алгоритм сортировки прямого выбора.

Что-то тут проще код ) https://ru.wikibooks.org/wiki/Реализации_алгоритмов/Сортировка/Выбором#Паскаль

Только надо заменить 1 в первом цикле и n на соотв. параметры.