Написать подпрограмму, которая отображает каждое N-е слово в предложении зеркально - Pascal ABC
Формулировка задачи:
Доброго времени суток. Помогите пожалуйста. Написать подпрограмму, которая отображает каждое N-е слово в предложении
зеркально.
Решение задачи: «Написать подпрограмму, которая отображает каждое N-е слово в предложении зеркально»
textual
Листинг программы
procedure revers(k:byte;var s,sl:string);
var i:byte;
c:char;
begin
for i:=1 to length(sl) div 2 do
begin
c:=sl[i];
sl[i]:=sl[length(sl)-i+1];
sl[length(sl)-i+1]:=c;
end;
delete(s,k,length(sl));
insert(sl,s,k);
end;
var s,sl:string;
n,i,k:byte;
begin
writeln('Введите предложение, слова разделены пробелами, в конце точка');
readln(s);
repeat
write('n>0 n=');
readln(n);
until n>0;
sl:='';
k:=0;
for i:=1 to length(s) do
if not(s[i] in [' ','.']) then sl:=sl+s[i]
else
begin
k:=k+1;
if k mod n=0 then revers(i-length(sl),s,sl);
sl:='';
end;
if k<n then write('В строке нет ',n,' слов')
else write(s)
end.
Объяснение кода листинга программы
- Создается процедура
revers, которая принимает два параметра:k- номер слова, которое нужно отобразить зеркально, иsl- исходное предложение, в котором нужно отобразить это слово зеркально. - Внутри процедуры используется цикл
for, который проходит по каждому символу в предложенииsl. - На каждой итерации цикла происходит следующее:
- Слово
sl[i]выводится на экран. - Строка
slизменяется таким образом, чтобы текущий символsl[i]был перемещен в конец строки. - Строка
slснова изменяется таким образом, чтобы текущий символsl[i]был перемещен в начало строки.
- Слово
- После завершения цикла
forудаляется словоs[i]из исходной строкиs. - Если в исходной строке
sосталось меньше слов, чем указано в параметреn, то выводится сообщение об этом. - В противном случае выводится исходная строка
s.