#include <iostream>
int gg(int k, int p, double m)
{
p = (k >= p) ? p : p / k;
return (m * 2 * p);
}
int main()
{
int k, p;
double m;
std::cout << "Сколько котлет можно одновременно положить на сковороду ? ";
std::cin >> k;
std::cout << "Сколько минут жарится одна сторона котлеты ? ";
std::cin >> m;
std::cout << "Сколько котлет вы будете жарить ? ";
std::cin >> p;
std::cout << p << " котлет пожарятся с двух сторон минимум за " << gg(k, p, m) << " минут";
}
Речь идет об использовании встроенной функции языка Паскаль - функции Pos. Конечно, использование функции PosEx, появившейся в Pascal.ABC, было бы эффективнее, но будем придерживаться классической версии.
Функция Pos позволяет найти позицию первого от начала строки вхождения в эту строку подстроки. Если вхождения нет - функция возвращает ноль. Принимая оставшуюся после найденного вхождения часть строки за новую строку и повторяя поиск, можно найти все вхождения.
Задание не говорит, как организован ввод текста. Дело в том, что в Паскале строка не может содержать переход к новой строке, а текст задан двумя строками. Можно организовать ввод двух строк, можно задать текст строковыми константами, можно организовать ввод из файла. Считая, что смысл задания в поиске вхождений, принимаем задания текста несущественным и задаем текст двумя строковыми константами. Это потребует выполнения алгоритма для каждой строки, следоватеьно, нам потребуется пользовательская функция, к которой мы будем обращаться.
const
c1='Не давши слово-крепись,';
c2='А давши - Держись';
cc='давши'; { искомый контекст }
function Kol(c,ci:string):integer;
{количество вхождений ci а c }
var
p,k,l,li:integer;
begin
k:=0;
li:=Length(ci);
l:=Length(c);
repeat
p:=Pos(ci,c);
if p>0 then
begin
l:=Length(c);
Inc(k);
if p+li<l then c:=Copy(c,p+li,l-(p+li-1))
end
until (p=0) or (p+li>=l);
Kol:=k
end;
begin
Writeln('Количество вхождений равно ',Kol(c1,cc)+Kol(c2,cc))
end.
Вывод решения:
Количество вхождений равно 2