Вопрос по информатике:
ПОМОГИТЕ Сделать программу и блок схему ! На Паскале.
Задание:
Определить сколько раз в тексте встречается слово "Давши".
Исходный текст:
Не давши слово-крепись,
А давши - Держись
Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?
Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок - бесплатно!
- 15.09.2016 12:59
- Информатика
- remove_red_eye 6658
- thumb_up 30
Ответы и объяснения 1
Поставленную задачу можно решать разными способами. Можно озаботиться красотой алгоритма, можно - эффективностью выполнения программы, можно еще много чем. В связи с тем, что в настоящее время компьютеры обладают большой вычислительной мощностью, а задача проста, выберем алгоритм, который имеет минимальную трудоемкость в написании и понятен внешне, хотя, быть может, в чем-то не совсем оптимален с точки зрения вычислительного процесса.
Речь идет об использовании встроенной функции языка Паскаль - функции 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
until (p=0) or (p+li>=l);
Kol:=k
end;
begin
Writeln('Количество вхождений равно ',Kol(c1,cc)+Kol(c2,cc))
end.
Вывод решения:
Количество вхождений равно 2
- 16.09.2016 03:10
- thumb_up 43
Знаете ответ? Поделитесь им!
Есть сомнения?
Не нашли подходящего ответа на вопрос или ответ отсутствует? Воспользуйтесь поиском по сайту, чтобы найти все ответы на похожие вопросы в разделе Информатика.
Трудности с домашними заданиями? Не стесняйтесь попросить о помощи - смело задавайте вопросы!
Информатика — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений.