Программа
подсчета числа вхождений текста B в
текст A с перекрытиями.
|
Program
N42;
|
Объявление
имени программы
|
Label
1, 2, 3;
|
Блок
объявления меток: задаем метки 1, 2 и 3
|
Var
|
Блок
объявления глобальных переменных
|
A,
B
:
String;
|
Переменная
A, B - заданные текст
|
C
:
String;
|
Переменная
C - вспомогательная переменная,
служит для хранения текста A
|
K
:
Integer;
|
Переменная
K - длина текста B
|
p
:
Integer;
|
Переменная
p - номер позиции вхождения текста B в
текст A
|
N
:
Integer;
|
Переменная
N - счетчик числа вхождений
|
|
|
Begin
|
Начало
тела программы
|
|
|
WriteLn
|
Формулировка
цели алгоритма
|
('PASCAL:
Подсчет числа вхождений текста B в текст
A с перекрытиями.');
|
Формулировка
цели алгоритма
|
|
|
WriteLn
('Введите текст A:');
|
Запрос
ввода A - исходного текста
|
ReadLn
(A);
|
Ввод
A
|
C
:= A;
|
Сохраняем
в C текст A, т.к. в дальнейшем он будет
изменен
|
|
|
WriteLn
('Введите текст B:');
|
Запрос
ввода B - исходного текста
|
ReadLn
(B);
|
Ввод
B
|
|
|
If
Length (B) > Length (A) Then
|
Сверяем
длины текстов A и B, и если длина текста B
больше длины текста A, то..
|
Begin
|
Начало
условного блока
|
WriteLn
|
Вывод
сообщения пользователю о
несоответствии длин текстов A и B
|
('Текст
B длиннее текста A, поэтому он не может
входить в текст A.');
|
Вывод
сообщения пользователю о
несоответствии длин текстов A и B
|
Goto
2;
|
Переход
на метку 2, т.е. конец программы
|
End;
|
Конец
условного блока
|
|
|
N
:= 0;
|
Начальное
значение счетчика числа вхождений - 0
|
|
|
K
:= Length (B);
|
Заносим
в K длину текста B
|
1:
p := Pos (B, A);
|
Метка
1: Определяем позицию первого вхождения
текста B в текст A и заносим в p
|
If
(p = 0) And (N = 0) Then
|
Если
вхождений больше нет (p = 0) и не было до
этого (N = 0), то...
|
Begin
|
Начало
условног блока
|
WriteLn
('Вхождений текста A в текст B нет.');
|
Вывод
сообщения об отсутствии вхождений
текста B в текст A
|
Goto
2;
|
Переход
на метку 2
|
End;
|
Конец
условного блока
|
|
|
If
(p = 0) Then Goto 3;
|
Если
вхождений больше нет, то переход на
метку 3, т.е. выходим из цикла
|
Delete
(A, 1, K - 1 + p);
|
Удаляем
из текста A символы, стоящие до вхождения
и само вхождение тоже
|
|
|
N
:= N + 1;
|
Увеличиваем
счетчик числа вхождений на единицу
|
Goto
1;
|
Переход
на метку 1, т.е. ищем новое вхождение
|
|
|
3:
WriteLn ('В текст "', C, '" текст "', B, '"
входит ', N, ' раз(а).');
|
Метка
3: Вывод сообщения пользователю о числе
нацденных вхождений
|
|
|
2:
ReadLn;
|
Метка
2: ожидание нажатия клавиши Enter для
завершения
|
End.
|
Конец
программы.
|