При изменении значений в pascal программа перестаёт работать

Рейтинг: 0Ответов: 1Опубликовано: 17.02.2023

Есть код

program qqq;
const n=10;
var a:array[4..n] of integer;
k, i:integer;
begin
  Randomize;
  for i:=1 to n do begin
    a[i]:=random(6)+4;
    write(a[i], ' ');
  end;
  writeln;
  k:=0;
  for i:=1 to n do
    if a[i] mod 2 = 0 then k:=k+1;
  writeln('четных: ',k,'    нечетных: ', n-k);
end.

Не работает из-за 8 строки, пишет: Ошибка времени выполнения: Индекс находился вне границ массива.

А также предупреждения в виде:

Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла (в 13 и 7 строках)

НО если мы поменяем все значения на +10, то есть получиться так:

program qqq;
const n=20;
var a:array[4..n] of integer;
k, i:integer;
begin
  Randomize;
  for i:=10 to n do begin
    a[i]:=random(6)+4;
    write(a[i], ' ');
  end;
  writeln;
  k:=0;
  for i:=10 to n do
    if a[i] mod 2 = 0 then k:=k+1;
  writeln('четных: ',k,'    нечетных: ', n-k-10);
end.

Оно будет работать!

Подскажите пожалуйста кто-нибудь почему так и как это можно исправить?

Ответы

▲ 0Принят

Kromster натолкнул на решение, спасибо ему.

Методом проб и ошибок просто поменял константу n на 13 и все заработало как по маслу.

Вот если кому нужно рабочий код:

program qqq;

var a:array[4..13] of integer;
k, i:integer;
begin
  Randomize;
  for i:=4 to 13 do begin
    a[i]:=random(6)+4;
    write(a[i], ' ');
  end;
  writeln;
  k:=0;
  for i:=4 to 13 do
    if a[i] mod 2 = 0 then k:=k+1;
  writeln('четных: ',k,'    нечетных: ', 10-k);
end.