Консультация № 197353
08.12.2019, 11:18
0.00 руб.
0 1 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Дан текст на русском языке. Напечатать в алфавитном порядке все звонкие согласные буквы, которые входят в каждое нечетное слово и не входят ни в одно четное слово.
в паскале

Обсуждение

давно
Старший Модератор
31795
6196
14.12.2019, 16:34
общий
это ответ
Здравствуйте, JonMoxley!

Смотрите код:
[code lang=pascal]const
{на все случаи жизни}
type_a:string='аоиеёэыуюя';{гласные}
type_b:string='бвгджзйлмнр';{согласные звонкие}
type_c:string='кпстфхцчшщ';{согласные глухие}
type_d:string='ьъ';{отдельные буквы}
type_e:string='!@#$%^&*()_-+={}[]:">? ';{возможные разделители}
var
a,b:string;
c,d:set of char;
e:char;
begin
{формирование контрольного множества}
b:=type_a;
c:=[];
while length(b)>0 do
begin
c:=c+[b[1]];
delete(b,1,1);
end;
{ввод строки - так для проформы}
repeat
write('enter string:=');
readln(a);
until length(a)>0;
{контрольная строка с возможными ошибками юзера}
a:='абитура, абитуриент - абитуриетка = абитуриентский';
writeln('before >',a,'<');
{защита от юзера - использование различных разделителей слов}
b:=type_e;
while length(b)>0 do
begin
while pos(b[1],a)>0 do a[pos(b[1],a)]:=',';
delete(b,1,1);
end;
{защита от юзера - удаляем повторы разделителей}
while pos(',,',a)>0 do delete(a,pos(',,',a),1);
{защита от юзера - забыл поставить точку в конце строки}
if a[length(a)]<>','then a:=a+',';
writeln('after >',a,'<');
{главный цикл}
while length(a)>0 do
begin
{выделение очередного слова}
b:=copy(a,1,pos(',',a)-1);
{формирвание текущего множества подконтрольных букв}
d:=[];
while length(b)>0 do
begin
if pos(b[1],type_a)>0 then d:=d+[b[1]];
delete(b,1,1);
end;
c:=c*d;
{удаление провереного слова}
delete(a,1,pos(',',a));
end;
{вывод результата}
write('result:=');for e:='а' to 'я' do if (e in c) then write(e:2);writeln;
writeln('press enter');
readln;
end.[/code]
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа