Не понимаю как исправить. Ошибка времени выполнения: Индекс находился вне границ массива
var
f: text;
schet, max: integer;
s: string;
begin
assign(f, '24 варианты 1-4.txt');
reset(f);
max := 0;
begin
readln(f, s);
schet := 1;
for var i := 0 to length(s) - 1 do
if ((s[i] <> s[i + 1]) and (s[i + 1] <> s[i + 2])) then schet := schet + 1
else
if (s[i] <> '0') then schet := schet + 1
else begin
if max < schet then max := schet;
schet := 1;
end;
close(f);
writeln(max);
end
end.
В чем ошибка и как ее исправить?
Ответы (1 шт):
Автор решения: Инквизитор
→ Ссылка
В выражении if ((s[i]<>s[i+1]) and (s[i+1]<>s[i+2])) в последнем сравнении вы гарантированно в последней итерации цикла вылезаете за пределы длины строки s - элемента s[i+2] при i = length(s)-1 не существует.
Исправить можно. Например, путем включения дополнительной проверки на достижение итератором i значения length(s)-1 и, в случае успешного результата, невычисления второй части условия (and (s[i+1]<>s[i+2])).