Множества. Вывести все глухие согласные буквы, которые входят в каждое нечётное слово и не входят хотя бы в одно чётное - Pascal

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

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

Дано предложение,состоящее из слов,разделённых любым количеством пробелов и оканчивающееся точкой.Вывести в алфавитном порядке все глухие согласные буквы,которые входят в каждое нечётное слово и не входят хотя бы в одно чётное. решение должно быть через множества с использованием процедур и функций

Решение задачи: «Множества. Вывести все глухие согласные буквы, которые входят в каждое нечётное слово и не входят хотя бы в одно чётное»

textual
Листинг программы
program Project1;
 
{Перевод букв строки в верхний регистр. Для кодовой страницы CP866 (DOS).}
function UpCase866(const aStr : String) : String;
var
  S : String;
  i : Integer;
begin
  S := aStr;
  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]:='Ё'
    else
      S[i] := UpCase(S[i]);
  UpCase866 := S;
end;
 
const
  {Множество разделителей слов.}
  D = [' ', '.', ',', ':', ';', '!', '?', '-', #9, #10, #13];
  {Множество русских глухих согласных букв.}
  Da = ['К', 'П', 'С', 'Т', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ'];
var
  S : String;
  Dw, D1, D2, DRes : set of Char;
  Ch : Char;
  i, Len, Cnt : Integer;
begin
  repeat
    Writeln('--------------------------------------------------');
    Writeln('Задайте текст:');
    Readln(S);
 
    {Решение.}
    S := UpCase866(S); {Приводим буквы строки к верхнему регистру.}
    Len := Length(S);  {Длина строки.}
    Dw := []; {Множество глухих согласных букв, которые входят в текущее слово.}
    D1 := []; {Множество глухих согласных букв, которые входят в каждое нечётное слово.}
    D2 := []; {Множество глухих согласных букв, которые входят в каждое чётное слово.}
    Cnt := 0; {Счётчик слов.}
    for i := 1 to Len do
      if not (S[i] in D) then {Если символ принадлежит слову.}
      begin
        {Если текущая буква является глухой согласной, то добавляем её во множество
        глухих согласных букв текущего слова.}
        Dw := Dw + [S[i]] * Da;
        if (i = Len) or (S[i + 1] in D) then {Отслеживаем конец слова.}
        begin
          Inc(Cnt); {Порядковый номер текущего слова.}
          if Cnt = 1 then {Если текущее слово является первым нечётным словом в тексте.}
            D1 := Dw      {Начальное содержимое множества D1.}
          else if Cnt = 2 then {Иначе, если текущее слово является первым чётным словом в тексте.}
            D2 := Dw           {Начальное содержимое множества D2.}
          else if Cnt mod 2 <> 0 then {Иначе, если текущее слово является нечётным.}
            D1 := D1 * Dw  {Глухие согласные буквы, которые входят в текущее нечётное слово и во все предыдущие нечётные слова.}
          else {Иначе (если текущее слово является чётным).}
            D2 := D2 * Dw; {Глухие согласные буквы, которые входят в текущее чётное слово и во все предыдущие чётные слова.}
          Dw := []; {Обнуление множества глухих согласных букв текущего слова.}
        end;
      end;
 
    {Множество глухих согласных букв, которые входят в каждое нечётное слово (D1)
    и которые не входят хотя бы в одно чётное слово (Da - D2).}
    DRes := D1 * (Da - D2);
 
    {Ответ.}
    Writeln('Ответ:'
      + #13#10'Множество глухих согласных букв, которые входят в каждое нечётное слово'
      + #13#10'и которые не входят хотя бы в одно чётное слово:');
    if DRes = [] then
      Writeln('Таких букв в тексте нет.')
    else
    begin
      for Ch := #0 to #255 do
        if Ch in DRes then
          Write(Ch, ' ');
      Writeln;
    end;
 
    Write('Повторить - Enter. Выход - любой символ + Enter. ');
    Readln(S);
  until S <> '';
end.

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

Этот код на языке Pascal решает задачу поиска всех глухих согласных букв, входящих в каждое нечетное слово и не входящих хотя бы в одно четное слово. Вначале определяется функция UpCase866, которая преобразует строку в верхний регистр. Это необходимо для кодовой страницы CP866 (DOS). Далее определяются два множества: D и Da. Множество D содержит разделители слов, а множество Da содержит русские глухие согласные буквы. Затем определяется переменная S, в которую пользователь должен ввести текст. После этого текст приводится к верхнему регистру с помощью функции UpCase866. Далее определяется несколько переменных: Len - длина строки S, Dw - множество глухих согласных букв, которые входят в текущее слово, D1 - множество глухих согласных букв, которые входят в каждое нечетное слово, D2 - множество глухих согласных букв, которые входят в каждое четное слово. Также определяется счетчик слов Cnt. Затем начинается цикл, в котором происходит проверка каждого символа строки S. Если символ не принадлежит множеству D, то он проверяется на глухость. Если символ является глухим, то он добавляется в множество Dw. Если текущее слово является первым нечетным словом в тексте, то множество D1 заменяется на Dw. Если текущее слово является первым четным словом в тексте, то множество D2 заменяется на Dw. Если текущее слово является нечетным, то D1 заменяется на D1 Dw, а если текущее слово является четным, то D2 заменяется на D2 Dw. После этого множество Dw обнуляется. Далее определяется множество DRes, которое представляет собой пересечение множеств D1 и (Da - D2). Затем происходит проверка: если DRes пусто, то выводится сообщение о том, что таких букв в тексте нет. В противном случае происходит вывод списка глухих согласных букв, входящих в каждое нечетное слово и не входящих хотя бы в одно четное слово. В конце пользователю предлагается повторить ввод или выйти из программы.

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


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

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

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