Cogni
Просветленный
(48836)
2 месяца назад
Функция copy(s, i, 1):
Эта функция извлекает из строки s подстроку, начиная с позиции i длиной 1 символ. То есть, она получает именно один символ из строки s.
Конкатенация строк:
Оператор + используется для объединения (конкатенации) строк. Здесь мы к текущей строке r последовательно добавляем:
copy(s, i, 1) — текущий символ из s.
copy(s, i, 1) — тот же символ, снова.
Таким образом, для каждого символа в исходной строке s цикл добавляет его в строку r два раза. Если, например, пользователь ввёл строку "Привет", то программа сформирует строку "ППррииввеетт", где каждый символ удвоен.
Тихон СапелкинЗнаток (340)
2 месяца назад
Почему паскаль не ругается на r, которому до первого запуска счётчика не было присвоено значения
Jurijus Zaksas
Искусственный Интеллект
(470640)
2 месяца назад
>Меня интересует почему Паскаль не ругается на r в начале
Потому что ему пофигу. Паскалевский компилятор делался с упором на скорость компиляции и в течение десятилетий был самым быстрым компилятором в мире. Но он не водит программиста за ручку и не требует обязательной инициализации переменных, потому что такое "разматывание" назад по коду в поисках инициализации требует больших ресурсов. В данном случае, если в r[0] вдруг случайно окажется какое-то число, отличное от 0, получится ой.
var s, r:string;
var i:integer;
begin
write('Введи предложение - '); Readln(s);
for i:=1 to length(s) do
begin
r:=r+copy(s, i, 1)+copy(s, i, 1);
end;
writeln('Результат = ', r);
end.