Kotorkovsciy
@Kotorkovsciy

В чём ошибка в коде, паскаль ((12): Ошибка времени выполнения: Индекс находился вне границ массива.)?

program p1;

type
  massive = array of integer;

function PolMos(a: massive; n: byte): char;
var
  c, i: byte;
begin
  c := 0;
  for i := low(a) to high(a) div 2 do
    if a[i] <> a[high(a) - i + 1] then c := 1;
  if c = 0 then writeln(chr(13), 'Массив является палиндромом')
  else writeln(chr(13), 'Массив не является палиндромом');
end;

function massiv(n: byte): char;
var
  i: byte;
  a: massive;
begin
  setlength(a, n);
  randomize;
  for i := low(a) to high(a) do        
  begin
    a[i] := random(n);        
    write(a[i]:4);
  end;
  PolMos(a, n);
end;

var
  n: byte;

begin
  write('Введите размер массива:   '); read(n);
  write('Массив: '); massiv(n);
  
end.


61aa9f2b2b50e828286684.jpeg
  • Вопрос задан
  • 1333 просмотра
Решения вопроса 1
Индекс находился вне границ массива

Русским по белому же написано.

Представим, что у нас массив a[] размером 2
Тогда
low(a)=0
high(a)=1
На первой же итерации:
i=0
high(a) - i + 1 = 2
2 находится за пределами границ массива.

А ещё из твоей функции никакое значение не возвращается.

И в PascalABC можно точки останова расставлять и смотреть, какие значения переменных у тебя там получились перед ошибкой.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы