Множества. Вывести все глухие согласные буквы, которые входят в каждое нечётное слово и не входят хотя бы в одно чётное - Pascal
Формулировка задачи:
Решение задачи: «Множества. Вывести все глухие согласные буквы, которые входят в каждое нечётное слово и не входят хотя бы в одно чётное»
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 пусто, то выводится сообщение о том, что таких букв в тексте нет. В противном случае происходит вывод списка глухих согласных букв, входящих в каждое нечетное слово и не входящих хотя бы в одно четное слово. В конце пользователю предлагается повторить ввод или выйти из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д