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

Объяснение кода листинга программы

Список действий в коде:

  1. Объявление констант и переменных:
    • Ds - все символы (от #0 до #255);
    • Da - буквы (А..П, Р..Я, Ё, а..п, р..я, ё, A..Z, a..z);
    • D - не буквы (все символы, кроме букв);
    • S - строка, введенная пользователем;
    • i - номер текущего символа в строке;
    • Pos1 - позиция первого символа текущего слова;
    • Len - длина строки;
    • Cnt - количество найденных слов.
  2. Объявление функции UpCaseRus, которая преобразует строку в верхний регистр русских букв.
  3. Основной цикл программы:
    • Запрос на ввод строки от пользователя.
    • Добавление пробела в начало строки.
    • Вывод списка слов с одинаковой буквой в начале и в конце.
    • Инициализация счетчика Cnt и переменной Pos1.
    • Перебор символов строки:
      • Если символ является не буквой (in D), то переход к следующему символу.
      • Если текущий символ является началом слова (позиция Pos1), то обновление значения Pos1.
      • Если текущий символ является концом слова (позиция Pos1 не меняется), то:
      • Проверка соответствия начальной и конечной буквы (UpcaseRus(s[i])).
      • Если условие выполняется, то увеличение значения Cnt и вывод найденного слова.
  4. Вывод общего количества найденных слов (Cnt).
  5. Запрос на повторный ввод строки от пользователя.
  6. Проверка введенной строки на пустоту (S <> '').
  7. Повторение шагов 3-6 до ввода строки.
  8. Выход из программы при вводе любого символа.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы