Проблема с динамическим массивом в паскале

Дан массив вещественных чисел Х. Записать элементы массива Х в массив Y следующим образом: в начальной части расположить положительные элементы, затем – отрицательные элементы, нулевые элементы не записывать.

const
xx= 20;
var
  i,k,yy: integer;
  x: array[1..xx] of integer;
  y: array of integer;
begin
  yy:=20;
SetLength(y, yy);
randomize;
for i:=1 to xx do x[i]:=random(61)-30;  
  for i:=1 to xx do
     if x[i]>0 then
     begin
        inc(k);
        y[k]:=x[i];
        end; 
  for i:=1 to 20 do
     if x[i]<0 then
        begin
        inc(k);
        y[k]:=x[i];
        end;
  for i:=1 to 20 do
     if x[i]=0 then yy:=yy-1;
 writeln (x,y);
end.

В 22 строке показывает ошибку "Ошибка времени выполнения: Индекс находился вне границ массива"


Ответы (2 шт):

Автор решения: MBo

Динамические массивы индексируются с нуля.

k не инициализировано.

Writeln не умеет выводить массивы.

→ Ссылка
Автор решения: RAlex

Пишите на PascalАВС.NЕТ - и будет Вам счастье. https://i.stack.imgur.com/77PMD.png

##
var n := 20;  // можно var n := ReadInteger; и вводить с клавиатуры
var x := SeqRandom(n, -30, 30).Select(t -> real(t)).ToArray;
x.Println;
var y := (x.Where(t -> t > 0) + x.Where(t -> t < 0)).ToArray;
y.Print
→ Ссылка