Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal ABC] строка не выводится на экран


Автор: petri 4.4.2012, 11:39
Строка y не выводится на экран, т.е. курсор просто остается в начале строки и все.
Код

 j:=1;
 i:=length(s);
 y:='';
 repeat
   y[j]:=s[i];
   {writeln(y[j]);}
   j:=j+1;
   i:=i-1;
 until i=0;
writeln(y);
{writeln(s);}


При этом если выводить символы по ходу цикла: {writeln(y[j]);}, то они нормально выводятся, их конечное число, т.е. зацикливания не происходит.

Строка s той же длины также нормально выводится: {writeln(s);}.
 
Почему y не выводится на экран?

Автор: Mirkes 4.4.2012, 18:56
Гениальный текст!  еще более гениальная среда исполнения - PascalABC (я с ним работаю, но не знал, что в нем есть такая ошибка).
Вы создали пустую строку y. То есть массив из нуля элементов типа char. А потом начинаете писать в разные элементы этого массива. 
В результате все приличные паскали выдали бы выход за границу массива range chesk error. А эта зараза пропустила smile .
Чтобы исправить ваш код нужно сделать одно из двух. 
1. До цикла написать y:=s;
2. В цикле вместо y[j]:=s[i]  написать y:=y+s[i];
Но только что-то одно.

Проверить мою гипотезу о работе программы очень просто. До всех модификаций сразу за строкой writeln(y); добавьте строку writeln(length(y));
Должен вывестись ноль!

Автор: petri 5.4.2012, 02:25
Спасибо, все получилось. Не полумал о том, что строка это массив и поэтому длина ограничена.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)