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.
Ни одна из функций не возвращает значений, поэтому логично было бы оформить их в виде процедур.
В
function f2()
дважды устанавливается размер внешнего массива. Но посколькуa
- это динамический массив, состоящий из динамических массивов, то необходимо в цикле задать размер каждого внутреннего массива (если, конечно, в данной разновидности Pascal не существует более элегантного способа).Полагаю, что со вводом данных и подсчётом суммы - та же история: необходим внутренний цикл по столбцам.
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;