Изменим программу так, чтобы она во введенном слове подсчитывала число букв «а» и заменяла их буквами «б». Так как операции ввода-вывода строки аналогичны, то можно сделать вывод о том, что достаточно заменить процедуру UpChar на процедуру ChangeChar и поменять соответствующий вызов.
В процедуре ChangeChar будем просматривать строку с целью поиска буквы «а», что можно организовать с помощью цикла while и стандартной функции Pos(‘a’, S). Как только функция Pos обнаруживает первое появление в строке S подстроки «а», она возвращает результат – номер позиции буквы «а». Счетчик найденных букв «а» увеличивается на единицу, а в эту позицию вписывается буква «б» и так продолжается до тех пор, пока в строке есть буквы «а».
Текст процедуры может выглядеть следующим образом:
procedure ChangeChar(var S: string);
var N : byte;
begin
N:=0; {Обнуление числа букв «а»}
while Pos(‘a’, S) > 0 do {Если найдена буква «а», то}
begin
N:=N+1; {Увеличить счетчик букв «а»на 1}
S[Pos(‘a’, S)] := ‘б’;{3аписать в позицию буквы «а» букву «б»}
End;
Writeln (‘B слове было ‘, N, ‘ букв «а» ‘);
end;
С использованием процедуры ChangeChar текст программы, подсчитывающей число букв «а» во введенной строке и заменяющей их буквами «б», будет таким:
program Change_Letter; {Подсчет и замена букв «а» на «б»}
var
S: string:
procedure ChangeChar(var S: string);{Процедура замены буквы «а» на «б»}
var N : byte;
begin
N:=0; {Обнуление числа букв «а»}
while Pos(‘a’, S) > 0 do {Если найдена буква «а», то}
begin
N:=N+1; {Увеличить счетчик букв «а»на 1}
S[Pos(‘a’, S)] := ‘б’;{3аписать в позицию буквы «а» букву «б»} end:
Writeln (‘B слове было ‘, N, ‘ букв «а» ‘);
end;
begin {Основная программа}
Write(‘Введите исходную строку: ‘);
Readln (S);
ChangeChar(S); {Вызов процедуры замены «а» на «б»}
Writeln(‘Получилась строка ‘,S);
end.