Как-то так:
//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
inc(errors); // увеличиваем счетчик ошибок
insert(zm1,str,i); // вставояем перед найденой подстрокой нашу новую подстроку из zm1
delete(str,i+length(zm1),length(ps1)); // удаляем старую подстроку
end;
// если нашли нужную подстроку, которая в ps2
if copy(str,i,length(ps2))=ps2 then
insert(zm2,str,i); // вставояем перед найденой подстрокой нашу новую подстроку из zm2
delete(str,i+length(zm2),length(ps2)); // удаляем старую подстроку
// выводим
writeln('Количество ошибок = ', errors);
writeln('Исправленная строка: ', str);
end.
Результат работы в приложении. Более читабельную версию кода можно посмотреть и проверить тут: https://rextester.com/OWVV92742
var (a, b) := (ArrRandom, ArrRandom);
Println('Исходные массивы: '); a.Println; b.Println; Println;
var m := a.Zip(b, (x, y)-> max(x, y)).ToArray;
Println('Конечные массивы: ');
a := a.Select((t, i)-> t + m[i]).ToArray; a.Println;
b := b.Select((t, i)-> t + m[i]).ToArray; b.Println;
Println($'{NewLine}Сред. арифм. = {a.Average}');
Println($'Минимальный = {b.Min}{NewLine}Максимальный = {b.Max}');
Пример вывода в приложении.
Как-то так:
//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
begin
var (a, b) := (ArrRandom, ArrRandom);
Println('Исходные массивы: '); a.Println; b.Println; Println;
var m := a.Zip(b, (x, y)-> max(x, y)).ToArray;
Println('Конечные массивы: ');
a := a.Select((t, i)-> t + m[i]).ToArray; a.Println;
b := b.Select((t, i)-> t + m[i]).ToArray; b.Println;
Println($'{NewLine}Сред. арифм. = {a.Average}');
Println($'Минимальный = {b.Min}{NewLine}Максимальный = {b.Max}');
end.
Пример вывода в приложении.