Найти число таких групп букв (в группе только буквы), которые начинаются и оканчиваются одной и той же буквой - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Дана строка. Найти число таких групп букв (в группе только буквы), которые начинаются и оканчиваются одной и той же буквой, причём начальная буква заглавная, группы разделяются пробелами.

Решение задачи: «Найти число таких групп букв (в группе только буквы), которые начинаются и оканчиваются одной и той же буквой»

textual
Листинг программы
  1. program Project1;
  2.  
  3. const
  4.   //Все символы.
  5.   Ds = [#0..#255];
  6.   //Буквы.
  7.   Da = [
  8.     'А'..'П', 'Р'..'Я', 'Ё', 'а'..'п', 'р'..'я', 'ё',
  9.     'A'..'Z', 'a'..'z'
  10.   ];
  11.   //Не буквы.
  12.   D = Ds - Da;
  13. var
  14.   S : String;
  15.   i, Pos1, Len, Cnt : Integer;
  16.  
  17. function UpCaseRus(s:string):string;
  18. {(С) Puporev}
  19. {приведение к верхнему регистру русских букв}
  20. {русские в верхний регистр}
  21. var
  22.   i:integer;
  23. begin
  24.   for i:=1 to length(s) do
  25.     s[i]:=upcase(s[i]);
  26.   for i:=1 to length(s) do
  27.     if s[i] in ['а'..'п'] then
  28.       s[i]:=chr(ord(s[i])-32)
  29.     else
  30.       if s[i] in ['р'..'я'] then
  31.         s[i]:=chr(ord(s[i])-80)
  32.       else
  33.         if s[i]='ё' then
  34.           s[i]:='Ё';
  35.   UpCaseRus:=s;
  36. end;
  37.  
  38. begin
  39.   repeat
  40.     Writeln('Задайте строку:');
  41.     Readln(S);
  42.     s:=' '+s;
  43.  
  44.     Writeln('Перечень слов, с одинаковой буквой в начале и в конце:');
  45.     Len := Length(S);
  46.     Pos1 := 0;
  47.     Cnt := 0;
  48.     for i := 1 to Len do begin
  49.       //Пропускаем не буквы.
  50.       if S[i] in D then Continue;
  51.       //Отслеживаем начало слова.
  52.       if (i = 1) or (S[i - 1] in D) then Pos1 := i;
  53.       //Отслеживаем конец слова.
  54.       if (i = Len) or (S[i + 1] in D) then
  55.         begin
  56.           //Проверка начальной и конечной буквы.
  57.           if (S[Pos1] = UpcaseRus(s[i]))   then
  58.             begin
  59.               Cnt := Cnt + 1;
  60.               Writeln( Copy(S, Pos1, i - Pos1 + 1) );
  61.             end;
  62.       end;
  63.     end;
  64.  
  65.     Writeln('Всего слов с одинаковой буквой в начале и в конце: ', Cnt);
  66.  
  67.     Writeln('Повторить - Enter, выход - любой символ + Enter.');
  68.     Readln(S);
  69.   until S <> '';
  70. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы