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