При создание динамических массивов нижний (первый) индекс 0? Вот пример:
Program massiv;
Begin
var m:=ReadLnInteger(‘M=’); var n:=ReadLnInteger(‘N=’);
var mt:= new integer[m,n];
for var K:=1 to M do
for var j:=1 to n do mt[k,j]:=k*j;
Println(mt);
// или
mt.Println
end.
При этом после запуска программы даёт ошибку. А вот при этом не даёт:
Program massiv;
Begin
var m:=ReadLnInteger(‘M=’); var n:=ReadLnInteger(‘N=’);
var mt:= new integer[m+1,n+1];
for var K:=1 to M do
for var j:=1 to n do mt[k,j]:=k*j;
Println(mt);
// или
mt.Println
end.
Только, во втором случае появляются лишний столбец и лишняя строка с нолями!
Если вы хотите обращаться к элементам динамического массива, то необходимо помнить, то индексация происходит от 0 до Length–1.
Об этом написано в справке: „Справочник по языку“ — „Типы данных“ — „Динамические массивы“
begin
var m := ReadLnInteger('M=');var n := ReadLnInteger('N=');
var mt := new integer[m, n];
for var K := 1 to M do
for var j := 1 to n do mt[k - 1, j - 1] := k * j;
Println(mt);
// или
mt.Println
end.
begin
var mt := New integer[ReadInteger('m ='), ReadInteger('n =')];
for var Row := 0 to mt.GetLength(0)-1 do
for var Col := 0 to mt.GetLength(1)-1 do
mt[Row,Col] := Succ(Row)*Succ(Col);
mt.Println
end.