Program1.pas(28) : Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта. помогите

Program pr1;

type 

arsen = class
  n: integer;
  a: array of array of integer;
  m: integer;

  function f1(): integer;
  begin
    write('n = ');
    readLn(n);
  
    write('m = ');
    readLn(m);
  end;

  function f2(): integer;
  begin 
    setLength(a, n);
    setLength(a, m);
  end;

  function f3(): integer;
  var 
    i: integer;
    j: integer;
  
  begin
    for i := low(a) to high(a) do 
    begin
      write($'a[{i}][{j}] = ');
      readLn(a[i][j]);
    end;
  end;

  function f4(): array of integer; 
  var 
    s: integer;
    i: integer; 
    j: integer;

  begin
    s := 0; 
    for i := low(a) to high(a) do 
    begin
      s := s + a[i][j];
    end;
    write(s)
  end;
end;

var 
  d: arsen;

begin 
  d := new arsen;
  d.f1();
  d.f2();
  d.f3();
  d.f4();
end.

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

Автор решения: Old Skull

Насколько понимаю, это PascalABC .NET.

  1. Ни одна из функций не возвращает значений, поэтому логично было бы оформить их в виде процедур.

  2. В function f2() дважды устанавливается размер внешнего массива. Но поскольку a - это динамический массив, состоящий из динамических массивов, то необходимо в цикле задать размер каждого внутреннего массива (если, конечно, в данной разновидности Pascal не существует более элегантного способа).

  3. Полагаю, что со вводом данных и подсчётом суммы - та же история: необходим внутренний цикл по столбцам.

procedure f2();
begin 
  setLength(a,n);
  for var i := low(a) to high(a) do 
  begin
    setLength(a[i],m);
  end
end;

procedure f3();
begin
  for var i := low(a) to high(a) do 
  begin
    for var j := low(a[i]) to high(a[i]) do 
    begin
      write($'a[{i}][{j}] = ');
      readLn(a[i][j]);
    end;
  end;
end;

procedure f4(); 
var 
  s: integer;
begin
  s:= 0; 
  for var i := low(a) to high(a) do 
  begin
    for var j := low(a[i]) to high(a[i]) do 
    begin
      s := s + a[i][j];
    end
  end;
  write(s)
end;
→ Ссылка