напишем программу:
Строка в Паскале - не только набор символов в массиве, но еще и длина этого набора. Длина хранится в нулевом элементе массива. В этои примере она остается неизменной и равной нулю.
Правильнее будет так:
>напишем программу:
>
Лучший способ ввести посимвольно строку:
способ конечно хороший, но не совсем корректный, в Паскале такого не предусмотрено, значит, некоторые компиляторы могут выдавать ошибку. Я чесно говоря думал, что Турбо Паскаль будет ругаться.
Также можно попробовать вместо S[0]:=CHR(B) поставить inc(s[0]) - может, чуть быстрее будет...
По-моему лучше юзать ASCIIZ строки (модуль Strings) ;)
Круто он всех подколол! А заменить поэтапно операторы на альтернативные никто не догадался ;)
Мы получили не строку со свойствами массива, а массив символов. При этом потерялись все преимущества строки (знаем длину!), но не приобрелись никакие новые (не работает присваивание - видимо, из-за того, что у нас "строки" по-прежнему нулевой длины). С таким же успехом можно было описать тип TStr = array[1..10] of char а наши строки описать как TStr. Тогда, кстати, заработает присваивание.
А вот что меня си-и-ильно удивило (спасибо за классный тест ), так это то, что в таком случае работает и оператор WriteLn. Кто-нибудь, скажите мне, какого ... он работает! (В опциях компилятора отключен Extended syntax, про который я сначала подумал)
ОПЕРАЦИЯ ПРИСВАИВАНИЯ РАБОТАЕТ!!!!!!!!
в строке R:=S; у нас происходит следующее:
строке R присваивается массив символов, где 0 символ это CHR(0)
кстати у меня не работает : WRITELN('А ВО ТЕПЕРЬ...',' ',R); ( R не печатается, и не должно печататься)
оператор writeln(s) или write(s) распечатает на экран столько символов, сколько сказанно в s[0]
(только там символ, а не число).
Ты в отладчике проверял? Там ничего не присваивается, убедиться можно хотя бы поставив в watches не просто R, а R,M (Memory dump)
А все-таки, неужели он умеет печатать просто массивы символов?
2trminator: Вызов функции присваивания происходит, но цикл выполняется 0 раз. И, блин, первый раз вижу, что в паскале, строка, описанная как переменная - инициализируется нулем! Просто никогда до этого не использовал такой извращенный цикл присваивания, без модификации байта длины.
А что ты имел в виду под вопросом?:
А все-таки, неужели он умеет печатать просто массивы символов?