Регистрация
Войти
Стать экспертом Правила
Информатика

Program z2;var str:string;n:integer;b:byte;beginreadln(str);for n:=1 to Length(str) do beginb:=OrdAnsi(str[n]);if (b<192) and (b<>32) then delete(str,n,1);end; writeln(str);end.Выдает: Ошибка времени выполнения: Индекс находился вне границ массива.Подскажите, пожалуйста, что не так

ОТВЕТЫ
"Не так" тут не понятый до конца механизм работы цикла for.
В соствии с заголовком цикла значение
Length(str) вычисляется перед первым входом в цикл и в дальнейшем не перевычисляется. Вы же в теле цикла посредством delete(str,n,1); строку укорачиваете. Вполне естественно, что в какой-то момент параметр цикла i в str[n] будет указывать за пределы её текущей длины.

935
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам