Консультация № 175109
10.12.2009, 19:39
35.00 руб.
0 3 1
Здравствуйте! Нужно сделать задачу на множества.

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

Спасибо.

Обсуждение

давно
Старший Модератор
31795
6196
10.12.2009, 21:37
общий
это ответ
Здравствуйте, Sheva17.

Смотрите приложение.
Комментировать старался каждое действие.
ps:будут вопросы обращайтесь в мини-форум.
Удачи!

Приложение:
var
a,b:packed array[0..255]of integer;
c,d:string;
e,f:integer;
h,g:set of char;
begin
{ставим множествo:согласные}
h:=['к','п','с','т','ф','х','ц','ч','ш','щ','б','в','г','д','ж','з','л','м','н','р'];
{варианты на все случаи жизни:
гласные буквы - а, е, и, о, у, ы, э, ю, я;
звонкие согласные буквы - б, в, г, д, ж, з, л, м, н, р;
глухие согласные буквы - к, п, с, т, ф, х, ц, ч, ш, щ.}
{вводим не пустую строку}
repeat
write('Enter string :');readln(c);
until length(c)>0;
{контрольная строка, КПТ есть во всех нечетных словах и встречается не более чем в одном четном}
c:='кпрстф,клолололоб,кпрст,щшщшщшщшр,кпрт,уцуцуцуцуцр';
{принудительно ставим запятую,если пользователь забыл поставить}
c:=c+',';
{удаляем пробелы двойные запятые}
while pos(' ',c)>0 do
delete(c,pos(' ',c),1);
while pos(',,',c)>0 do
delete(c,pos(',,',c),1);
{сброс счетчикa слов}
for e:=0 to 255 do a[e]:=0;
{последовательно перебираем всю строку}
f:=0;
while length(c)>0 do
begin
d:=copy(c,1,pos(',',c));{выделяем обрабатываемое слово}
delete(c,1,pos(',',c));{удаляем слово}
inc(f);{порядковый номер слова}
if odd(f)then
begin{нечетное слово}
g:=[];{сбрасываем множество}
while length(d)>0 do{последовательно перебираем всю строку}
begin
if d[1] in h then g:=g + [d[1]];{если буква в множестве, то то она согласная}
delete(d,1,1);{удаляем проверенную букву}
end;
h:=h*g;{оставляем только те бкувы, которые встретились в текущем слове}
end
else
begin{четные слова}
{сбрасываем счетчики}
for e:=0 to 255 do b[e]:=0;
while length(d)>0 do{последовательно перебираем всю строку}
begin
if d[1] in h then inc(b[ord(d[1])]);{буква согласная, то увеличиваем счетчик}
delete(d,1,1){удаляем проверенную букву}
end;
for e:=0 to 255 do
if b[e]>0 then inc(a[e]);{увеличиваем счетчик количества слов}
end;
end;
{вывод результата}
writeln('result:');
for e:=0 to 255 do
{вывод будет происходить когда совпадут два условия:
1-символ находится в заданном множестве и
2-символ будет в нужном количестве слов}
if (chr(e)in h)and(a[e]<2)then
writeln(chr(e):2);
readln;
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
10.12.2009, 22:42
общий
Зенченко Константин Николаевич:
Большое спасибо! За комментарии отдельное. А то на защите ничего рассказать бы не смог.
давно
Старший Модератор
31795
6196
11.12.2009, 12:21
общий
Sheva17:
Успехов!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа