Информатика Архивный вопрос

Паскаль
выдает ошибку в процедуре: Нет индексного свойства по умолчанию для типа integer. Помогите разобраться.


procedure input (var n,m:integer; var a:array of integer);
var i,j:integer;
begin
clrscr;
write('input quantity of rows ');readln(n);
write('input quantity of columns ');readln(m);
for i:=1 to n do begin
for j:=1 to m do begin
write(' a[',i,',',j,']=');
read (a[i][j]);
writeln; end;
end;end;

1 комментария:
Надо полный текст приводить программы, а не одну процедуру.

Ответы

Гость

Собака зарыта в строчках
var a:array of integer
...
read(a[i][j])

Смысл в том, что a, похоже, объявлен как одномерный массив, а по твоей задумке он двумерный. Поставь там инициализацию двумерных массивов.
(В PascalABC.Net, если ты тоже в этой среде и этом диалекте, то там я ручаюсь, что там правильно var a:array  [,] of integer. Хотя допускаю, что везде одинаково).

5 комментария:
В PascalABC.Net a[i,j] и a[i][j] - это обращения к совершенно разным массивам, а не просто разные формы записи.
А здесь вроде как даже нет обращения a[i,j] - ведь write(' a[',i,',',j,']='); это не обращение. А мое предложение инициализировать массив через var a:array [,] of integer действительно работает (см. "Справка">>"Типы данных">>"Динамические массивы", строчка 5, если считать заголовки.)
Это была реплика на Ваше " Хотя допускаю, что везде одинаково".
Что до процедуры - там действительно ошибка в размерностях массива: параметром объявлен динамический массив, а обращение при чтении в его элемент идет, как в элемент массива, состоящего из динамических массивов.
Да, согласен, суть ошибки именно в этом. А уж массив массивов или двумерный массив - не суть важно.

Похожие вопросы