Найти число таких групп букв (в группе только буквы), которые начинаются и оканчиваются одной и той же буквой - 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 до ввода строки.
- Выход из программы при вводе любого символа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д