Найти число таких групп букв (в группе только буквы), которые начинаются и оканчиваются одной и той же буквой - Free Pascal
Формулировка задачи:
Дана строка. Найти число таких групп букв (в группе только буквы), которые начинаются и оканчиваются одной и той же буквой, причём начальная буква заглавная, группы разделяются пробелами.
Решение задачи: «Найти число таких групп букв (в группе только буквы), которые начинаются и оканчиваются одной и той же буквой»
textual
Листинг программы
program Project1;
const
//Все символы.
Ds = [#0..#255];
//Буквы.
Da = [
'А'..'П', 'Р'..'Я', 'Ё', 'а'..'п', 'р'..'я', 'ё',
'A'..'Z', 'a'..'z'
];
//Не буквы.
D = Ds - Da;
var
S : String;
i, Pos1, Len, Cnt : Integer;
function UpCaseRus(s:string):string;
{(С) Puporev}
{приведение к верхнему регистру русских букв}
{русские в верхний регистр}
var
i:integer;
begin
for i:=1 to length(s) do
s[i]:=upcase(s[i]);
for i:=1 to length(s) do
if s[i] in ['а'..'п'] then
s[i]:=chr(ord(s[i])-32)
else
if s[i] in ['р'..'я'] then
s[i]:=chr(ord(s[i])-80)
else
if s[i]='ё' then
s[i]:='Ё';
UpCaseRus:=s;
end;
begin
repeat
Writeln('Задайте строку:');
Readln(S);
s:=' '+s;
Writeln('Перечень слов, с одинаковой буквой в начале и в конце:');
Len := Length(S);
Pos1 := 0;
Cnt := 0;
for i := 1 to Len do begin
//Пропускаем не буквы.
if S[i] in D then Continue;
//Отслеживаем начало слова.
if (i = 1) or (S[i - 1] in D) then Pos1 := i;
//Отслеживаем конец слова.
if (i = Len) or (S[i + 1] in D) then
begin
//Проверка начальной и конечной буквы.
if (S[Pos1] = UpcaseRus(s[i])) then
begin
Cnt := Cnt + 1;
Writeln( Copy(S, Pos1, i - Pos1 + 1) );
end;
end;
end;
Writeln('Всего слов с одинаковой буквой в начале и в конце: ', Cnt);
Writeln('Повторить - Enter, выход - любой символ + Enter.');
Readln(S);
until S <> '';
end.
Объяснение кода листинга программы
Список действий в коде:
- Объявление констант и переменных:
Ds- все символы (от #0 до #255);Da- буквы (А..П, Р..Я, Ё, а..п, р..я, ё, A..Z, a..z);D- не буквы (все символы, кроме букв);S- строка, введенная пользователем;i- номер текущего символа в строке;Pos1- позиция первого символа текущего слова;Len- длина строки;Cnt- количество найденных слов.
- Объявление функции
UpCaseRus, которая преобразует строку в верхний регистр русских букв. - Основной цикл программы:
- Запрос на ввод строки от пользователя.
- Добавление пробела в начало строки.
- Вывод списка слов с одинаковой буквой в начале и в конце.
- Инициализация счетчика
Cntи переменнойPos1. - Перебор символов строки:
- Если символ является не буквой (
in D), то переход к следующему символу. - Если текущий символ является началом слова (позиция
Pos1), то обновление значенияPos1. - Если текущий символ является концом слова (позиция
Pos1не меняется), то: - Проверка соответствия начальной и конечной буквы (
UpcaseRus(s[i])). - Если условие выполняется, то увеличение значения
Cntи вывод найденного слова.
- Если символ является не буквой (
- Вывод общего количества найденных слов (
Cnt). - Запрос на повторный ввод строки от пользователя.
- Проверка введенной строки на пустоту (
S <> ''). - Повторение шагов 3-6 до ввода строки.
- Выход из программы при вводе любого символа.