Напечатать в алфавитном порядке все гласные буквы, которые входят в каждое четное слово - 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 и выполняет следующие действия:
- Объявляет переменные и константы, включая список гласных букв и набор разделителей.
- Запрашивает у пользователя ввод строки, разделенной разделителями.
- Удаляет все разделители из введенной строки, заменяя их на запятые.
- Разбивает строку на слова и сохраняет их в массиве.
- Создает массив множеств, где каждое множество содержит только гласные буквы из соответствующего слова.
- Производит пересечение всех множеств, получая в результате множество, содержащее все гласные буквы, встречающиеся в каждом четном слове.
- Если это множество пусто, выводит сообщение о том, что в тексте нет гласных букв, входящих во все четные слова.
- В противном случае выводит все гласные буквы по алфавиту. Примечание: В этом коде используется диапазон кодов от 65 до 241, поскольку это диапазон символов, которые могут быть представлены в языке Pascal.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д