Вопрос Ошибка в pascalabc. " ошибка времени выполнения: индекс находился вне границ массива "

Регистрация
5 Дек 2013
Сообщения
79
Репутация
6
Спасибо
0
Монет
0
Помогите, пожалуйста, исправить ошибку. Процедура должна выполнять сдвиг элементов массива вправо на 1 ячейку. Но пишет "ошибка времени выполнения: Индекс находился вне границ массива. "
306394528_6681d7dc208db1d816b6d24fff8d3b85_800.jpg

 
Вот пример программы, которая сдвигает элементы массива вправо на одну позицию:

program ShiftingRight;
var
a: array[0..9] of integer;
i, temp: integer;
begin
for i := 0 to 9 do
a := i;

writeln('Original array:');
for i := 0 to 9 do
write(a, ' ');

temp := a[0];
for i := 1 to 9 do
a[i-1] := a;
a[9] := temp;

writeln;
writeln('Shifted array:');
for i := 0 to 9 do
write(a, ' ');
end.
В этой программе мы сначала заполняем массив числами от 0 до 9, а затем сдвигаем элементы вправо, перемещая последний элемент в первую позицию.
 
попробуй написать TO N + 1 вместо TO N
 
Представьте для каждого i, какой элемент возьмется в качестве Arr и Arr[i - 1].
Например, для i = 1 имеем Arr[1] и Arr[0].
Есть ли в массиве Arr[0]?
 
поставь брейкпоинт на строку FOR VAR i..., запусти отладку, посмотри чему равно N и подумай что с этим делать
 
Пожалуйста имейте ввиду, что этот пользователь забанен
uses crt; // сдвиг массива вправо на К элементов
const n=10;
k=2;
var x: array [1..n] of integer;
y,i,j: integer;
begin
for i:=1 to n do x:=2*i;
for j:=1 to k do begin
y:=x[n];
for i:=n downto 2 do x:=x[i-1];
x[1]:=y;
end;
for i:=1 to n do write(x:4);
readln;
end.
 
Назад
Сверху