ПОМОГИТЕ Сделать программу и блок схему ! На Паскале.
Задание:
Определить сколько раз в тексте встречается слово "Давши".
Исходный текст:
Не давши слово-крепись,
А давши - Держись
Ответы
Ответ дал:
0
Поставленную задачу можно решать разными способами. Можно озаботиться красотой алгоритма, можно - эффективностью выполнения программы, можно еще много чем. В связи с тем, что в настоящее время компьютеры обладают большой вычислительной мощностью, а задача проста, выберем алгоритм, который имеет минимальную трудоемкость в написании и понятен внешне, хотя, быть может, в чем-то не совсем оптимален с точки зрения вычислительного процесса.
Речь идет об использовании встроенной функции языка Паскаль - функции 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
Речь идет об использовании встроенной функции языка Паскаль - функции 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
Ответ дал:
0
Спасибо большое! За объяснение-огромное!
Вас заинтересует
1 год назад
1 год назад
6 лет назад
9 лет назад
9 лет назад