Напечатать в алфавитном порядке все гласные буквы, которые входят в каждое четное слово - Pascal

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

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

Текст задан строкой, напечатать в алфавитном порядке: все гласные буквы, которые входят в каждое четное слово.

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

textual
Листинг программы
uses crt;
const gl=['а','е','ё','и','о','у','ы','э','ю','я',
         'А','Е','Ё','И','О','У','ы','Э','Ю','Я',
         'a','e','i','o','u','y','A','E','I','U','Y'];{множество гласных букв}
      rz=[' ','.','?','!',',',':',';','-'];{множество разделителей, можно добавить}
type mn=set of char;{тип множеств}
var s,s1:string;{вводимый текст-строка, вспомогательная строка для выделения слов}
    ch:array[1..100] of string;{массивы четных слов}
    mres:mn;{результирующее множество гласных из четных слов}
    mch:array[1..100] of mn;{массив множеств из гласных букв четных слов}
    i,j,n:byte;{счетчики циклов, фактический размеры массивов}
begin
clrscr;{очищаем экран}
writeln('Введите строку из слов, разделенных знаками разделителями');
readln(s);
s:=s+',';{добавим запятую в конец}
for i:=1 to length(s) do
if s[i] in rz then s[i]:=',';{заменим все разделители на запятые}
while pos(',,',s)>0 do{пока есть 2 запятых рядом}
delete(s,pos(',,',s),1);{1 удаляем}
i:=0;;n:=0;{обнуляем счетчик слов и размер массива}
while pos(',',s)>0 do{пока в строке есть запятые}
 begin
  inc(i);{считаем их(т.е. слова)}
  s1:=copy(s,1,pos(',',s)-1);{берем слово до запятой}
  if i mod 2=0 then{собираем массив четных слов}
   begin
    inc(n);
    ch[n]:=s1;
   end;
  delete(s,1,pos(',',s));{удаляем просмотренное слово с запятой}
 end;
for i:=1 to n do{создаем массив множеств гласных букв четных слов}
 begin
  mch[i]:=[];
  for j:=1 to length(ch[i]) do
  if ch[i][j] in gl then include(mch[i],ch[i][j]);{из каждого слова создаем множество}
 end;
mres:=gl;{результирующее множество пока включает все гласные буквы}
for i:=1 to n do
mres:=mres*mch[i];{перемножаем(получаем пересечение всех множеств гласных букв четных слов)}
if mres=[] then{если ни одной буквы нет}
write('Гласных букв, входящих во все четные слова, нет!')
else {иначе выводим все буквы по алфавиту.}
 for i:=65 to 241 do{диапазон кодов, в который попадают нужные нам символы}
 if chr(i) in mres then write(chr(i),' ');
{если символ есть в во всех четных словах выводим ее на экран через пробел}
readln
end.

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

Этот код написан на языке Pascal и выполняет следующие действия:

  1. Объявляет переменные и константы, включая список гласных букв и набор разделителей.
  2. Запрашивает у пользователя ввод строки, разделенной разделителями.
  3. Удаляет все разделители из введенной строки, заменяя их на запятые.
  4. Разбивает строку на слова и сохраняет их в массиве.
  5. Создает массив множеств, где каждое множество содержит только гласные буквы из соответствующего слова.
  6. Производит пересечение всех множеств, получая в результате множество, содержащее все гласные буквы, встречающиеся в каждом четном слове.
  7. Если это множество пусто, выводит сообщение о том, что в тексте нет гласных букв, входящих во все четные слова.
  8. В противном случае выводит все гласные буквы по алфавиту. Примечание: В этом коде используется диапазон кодов от 65 до 241, поскольку это диапазон символов, которые могут быть представлены в языке Pascal.

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


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

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

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