Const n=5;
var
a:array[1..n] of integer;
b:array[1..10000] of integer;
i,j:integer;
begin
for i:=1 to n do begin
a[i]:=random(100);
write(a[i]:4);
end;
for i:=1 to n do begin
if (i mod 2=1) and (i div i=1) and (i div 1=i) then b[j]:=i;
end;
writeln(b[j]);
end.
Program1.pas(12) : Ошибка времени выполнения: Индекс находился вне границ массива.
Подскажите в чем ошибка

19 Сен 2019 в 03:43
314 +1
0
Ответы
1

Ошибка возникает из-за неправильного использования переменной j. Внутри второго цикла for вы не увеличиваете значение j, поэтому оно остается равным 0 (значение по умолчанию для integer). У вас также опечатка в условии: i div i=1 всегда будет истинным, независимо от значения i, и выражение i div 1=i также всегда будет истинным.

Исправьте свой код следующим образом:

Const
n=5;
var
a: array[1..n] of integer;
b: array[1..10000] of integer;
i,j: integer;
begin
Randomize;
for i:=1 to n do begin
a[i]:= Random(100);
write(a[i]:4);
end;
j := 1; // инициализируем j
for i:=1 to n do begin
if (i mod 2 = 1) and (i <> 1) then begin
b[j]:= i;
j := j + 1; // увеличиваем j
end;
end;
for i:=1 to j do begin
writeln(b[i]);
end;
end.

Теперь код должен работать правильно без ошибок времени выполнения.

19 Апр 2024 в 21:46
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир