#pas
var
x,y: array of integer;
a,z: array of string;
m,ring,k,rings:integer;
begin
read(rings);
FOR ring:=1 to rings do
BEGIN // начало цикла FOR
k:=3*ring*ring-3*ring;
m:=1;
while (m/(6*ring))<=0.25 do
begin // начало цикла WHILE
a[k+m]:=z[k+m]; // Вот тут НЕ ВЕРЮ. Начало с a[2], а массив начинается с 0
x[k+m]:=14+14*(ring-m); // поэтому не верю и в твою математику
y[k+3*ring+m]:=-y[k+m];
x[k+3*ring+m]:=-x[k+m];
a[k+3*ring+m]:=z[k+3*ring+m];
if (m/(6*ring))<=(1/(ring+1)) then
y[k+m]:=-15-24*ring
else
begin // начало IF false
y[k+m]:=-15-24*(2*ring-m+1);
y[k+3*ring-m]:=-y[k+m];
x[k+3*ring-m]:=x[k+m];
a[k+3*ring-m]:=z[k+3*ring-m];
y[k+6*ring-m]:=y[k+m];
x[k+6*ring-m]:=-x[k+m];
a[k+6*ring-m]:=z[k+6*ring-m];
end; // конец IF false
inc(m);
end; // конец цикла WHILE
END; // конец цикла FOR
end.
И не забывай, что нумерация динамических массивов начинается с 0.