Как-то так:
//fpc 3.0.0
program HelloWorld;
var
str, ps1, zm1, ps2, zm2: string;
errors, i: integer;
begin
// обнуляем ошибки
errors:= 0;
// просим строку
writeln('Enter string: ');
readln(str);
ps1:= 'чя';// ищем в строке
zm1:= 'ча'; // меням на
ps2:= 'щя'; // ищем в строке
zm2:= 'ща'; // меняем на
// перебираем строку посимвольно
for i:=length(str) downto 1 do
// если нашли нужную подстроку, которая в ps1
if copy(str,i,length(ps1))=ps1 then
begin
inc(errors); // увеличиваем счетчик ошибок
insert(zm1,str,i); // вставояем перед найденой подстрокой нашу новую подстроку из zm1
delete(str,i+length(zm1),length(ps1));// удаляем старую подстроку
end;
// перебираем строку посимвольно
for i:=length(str) downto 1 do
// если нашли нужную подстроку, которая в ps2
if copy(str,i,length(ps2))=ps2 then
begin
inc(errors); // увеличиваем счетчик ошибок
insert(zm2,str,i); // вставояем перед найденой подстрокой нашу новую подстроку из zm2
delete(str,i+length(zm2),length(ps2));// удаляем старую подстроку
end;
// выводим
writeln('Количество ошибок = ', errors);
writeln('Исправленная строка: ', str);
end.
Результат работы в приложении. Более читабельную версию кода можно посмотреть и проверить тут: https://rextester.com/OWVV92742