Ошибка времени выполнения: Индекс находился вне границ массива...чтто не так? const n=30;...

0 голосов
77 просмотров

Ошибка времени выполнения: Индекс находился вне границ массива...чтто не так?
const n=30;
var i,j,p,q:integer;
c:array[1..n,1..n+1] of integer;
a:array[1..n+1] of integer;
b:array[1..n+1] of integer;

begin
readln(q,p);


For i:=1 to n do
For j:=1 to n+1 do
c[i,j]:=random(28)+1;


begin
for i:=1 to n+1 do
p:=random(28)+1;
end;

for j:=1 to n+1 do
begin
q:=random(28)+1;
end;

for i:=n downto p do// вставка p
for j:=1 to n+1 do//
c[i+1,j]:=c[i,j];//

for j:=1 to n+1 do c[p,j]:=a[i];
for j:=n+1 downto q do
for i:=1 to N+1 do
c[i,j+1]:=c[i,j];
for i:=1 to n+1 do c[i,q]:=b[i];

for i:=1 to n+1 do begin
for j:=1 to n+1 do
write(c[i,j]:2);
writeln;//
end;
end.


Информатика (41 баллов) | 77 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Обратите внимание на цикл
for i:=n downto p do // вставка p
   for j:=1 to n+1 do
     c[i+1,j]:=c[i,j];
У Вас массив с описан как c:array[1..n,1..n+1] of integer;
В то же время, первый индекс у Вас в цикле меняется от  n+1 до p+1 (n+1 выходит за границу), а второй - от 1 до n+1 (это допустимо)

(142k баллов)
0

то еесть надо убрать +1? всмысли c[i+1,j]:=c[i,j] эту строчку убрать?или я не понимаю(

0

Откуда же я знаю, что надо? Зависит от того, каков алгоритм. Вы просили указать место ошибки и причину - я указал. А для того, чтобы ответить на вопрос о том, как это все должно быть на самом деле - это надо знать исходную постановку задачи и проверять, насколько заложенный алгоритм ей соответствует. Это совсем уже другая задача....

0

Попробуйте для начала написать c:array[1..n+1,1..n+1] of integer; а если не получится, значит не повезло....

0

ясно .спасибо.матрица прросто дана nxn+1