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) : Ошибка времени выполнения: Индекс находился вне границ массива. Подскажите в чем ошибка
Ошибка возникает из-за неправильного использования переменной 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.
Теперь код должен работать правильно без ошибок времени выполнения.
Ошибка возникает из-за неправильного использования переменной j. Внутри второго цикла for вы не увеличиваете значение j, поэтому оно остается равным 0 (значение по умолчанию для integer). У вас также опечатка в условии: i div i=1 всегда будет истинным, независимо от значения i, и выражение i div 1=i также всегда будет истинным.
Исправьте свой код следующим образом:
Constn=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.
Теперь код должен работать правильно без ошибок времени выполнения.